diff --git a/vendor/autoload.php b/vendor/autoload.php
deleted file mode 100644
index aa1f4a8..0000000
--- a/vendor/autoload.php
+++ /dev/null
@@ -1,25 +0,0 @@
- Things are getting better every day. 🚀
-
-##### [Version 3.2.13](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.12...v3.2.13) (2020-06-10)
-
-Adds plan logic and expiration
-
-##### [Version 3.2.12](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.11...v3.2.12) (2020-06-10)
-
-Adds key filter
-
-##### [Version 3.2.11](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.10...v3.2.11) (2020-06-04)
-
-* remove non-printable chars
-
-##### [Version 3.2.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.9...v3.2.10) (2020-05-28)
-
-* Remove extra files on export
-
-##### [Version 3.2.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.8...v3.2.9) (2020-05-18)
-
-adds new endpoints
-
-##### [Version 3.2.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.7...v3.2.8) (2020-03-24)
-
-* change license handler method access
-
-##### [Version 3.2.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.6...v3.2.7) (2020-03-24)
-
-* fix callback for license processing hook
-
-##### [Version 3.2.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.5...v3.2.6) (2020-03-23)
-
-* Fix notice on license deactivation
-
-##### [Version 3.2.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.4...v3.2.5) (2020-03-23)
-
-* always load notification manager last
-
-##### [Version 3.2.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.3...v3.2.4) (2020-03-21)
-
-* Cast version response to array for icons
-
-##### [Version 3.2.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.2...v3.2.3) (2020-03-21)
-
-* use product slug instead of the one from api
-
-##### [Version 3.2.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.1...v3.2.2) (2020-03-13)
-
-* improve notice dismiss mechanism
-
-##### [Version 3.2.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.0...v3.2.1) (2020-03-05)
-
-Fix rollback call for private products
-
-#### [Version 3.2.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.9...v3.2.0) (2020-03-04)
-
-* adds license activation/deactivation handlers for wp cli
-* adds compatibility with the newest license API
-
-##### [Version 3.1.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.8...v3.1.9) (2020-02-24)
-
-* Add integration with GitHub actions
-
-## [3.1.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.7...v3.1.8) (2019-11-18)
-
-
-### Bug Fixes
-
-* update developers name ([6aca63e](https://github.com/Codeinwp/themeisle-sdk/commit/6aca63e))
-
-## [3.1.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.6...v3.1.7) (2019-11-07)
-
-
-### Bug Fixes
-
-* license field style on wp5.3 ([0239997](https://github.com/Codeinwp/themeisle-sdk/commit/0239997))
-* license field style on wp5.3 ([86d3a1b](https://github.com/Codeinwp/themeisle-sdk/commit/86d3a1b))
-
-## [3.1.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.5...v3.1.6) (2019-09-24)
-
-
-### Bug Fixes
-
-* remove license related options when deactivated ([02cd6ce](https://github.com/Codeinwp/themeisle-sdk/commit/02cd6ce))
-* remove license related options when deactivated ([d3c1a1f](https://github.com/Codeinwp/themeisle-sdk/commit/d3c1a1f))
-
-## [3.1.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.4...v3.1.5) (2019-09-11)
-
-
-### Bug Fixes
-
-* allow unloading certain module features ([2a2559a](https://github.com/Codeinwp/themeisle-sdk/commit/2a2559a))
-* license activation workflow, show error message when failed to a… ([ade795c](https://github.com/Codeinwp/themeisle-sdk/commit/ade795c))
-* license activation workflow, show error message when failed to activate ([2f5cbae](https://github.com/Codeinwp/themeisle-sdk/commit/2f5cbae))
-
-## [3.1.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.3...v3.1.4) (2019-08-23)
-
-
-### Bug Fixes
-
-* license key was missing on get_version call ([365cde6](https://github.com/Codeinwp/themeisle-sdk/commit/365cde6))
-* license key was missing on get_version call ([c02f225](https://github.com/Codeinwp/themeisle-sdk/commit/c02f225))
-
-## [3.1.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.2...v3.1.3) (2019-08-20)
-
-
-### Bug Fixes
-
-* license deactivation behaviour https://github.com/Codeinwp/visua… ([59c4afe](https://github.com/Codeinwp/themeisle-sdk/commit/59c4afe))
-* license deactivation behaviour https://github.com/Codeinwp/visualizer-pro/issues/192 ([f641e18](https://github.com/Codeinwp/themeisle-sdk/commit/f641e18))
-
-## [3.1.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.1...v3.1.2) (2019-08-12)
-
-
-### Bug Fixes
-
-* phpunit test case ([efe851c](https://github.com/Codeinwp/themeisle-sdk/commit/efe851c))
-* url format for license endpoint, improve changelog handling and license checks ([a492c68](https://github.com/Codeinwp/themeisle-sdk/commit/a492c68))
-
-## [3.1.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.0...v3.1.1) (2019-08-08)
-
-
-### Bug Fixes
-
-* adds is_file for file existence check ([d1205c4](https://github.com/Codeinwp/themeisle-sdk/commit/d1205c4))
-* adds is_file for file existence check ([be119c1](https://github.com/Codeinwp/themeisle-sdk/commit/be119c1))
-
-# [3.1.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.10...v3.1.0) (2019-08-05)
-
-
-### Bug Fixes
-
-* adds extra comments for rest of the options, fix [#64](https://github.com/Codeinwp/themeisle-sdk/issues/64) ([018b22f](https://github.com/Codeinwp/themeisle-sdk/commit/018b22f))
-* hide license key when active under a password mask, fix [#67](https://github.com/Codeinwp/themeisle-sdk/issues/67) ([c0633c2](https://github.com/Codeinwp/themeisle-sdk/commit/c0633c2))
-* new uninstall feedback popup issues ([5bda4bd](https://github.com/Codeinwp/themeisle-sdk/commit/5bda4bd))
-* phpcs indentation errors ([d59ed4f](https://github.com/Codeinwp/themeisle-sdk/commit/d59ed4f))
-* undefined notices on license check, fix [#60](https://github.com/Codeinwp/themeisle-sdk/issues/60) ([7f56a97](https://github.com/Codeinwp/themeisle-sdk/commit/7f56a97))
-* uninstall feedback popup placement [[#61](https://github.com/Codeinwp/themeisle-sdk/issues/61)] ([1102d6c](https://github.com/Codeinwp/themeisle-sdk/commit/1102d6c))
-
-
-### Features
-
-* new product feedback popup ([f0dbab3](https://github.com/Codeinwp/themeisle-sdk/commit/f0dbab3))
-* new uninstall feedback form for themes ([8a29f21](https://github.com/Codeinwp/themeisle-sdk/commit/8a29f21))
-
-## [3.0.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.9...v3.0.10) (2019-07-16)
-
-
-### Bug Fixes
-
-* compatibility with lower PHP versions ([065ac8e](https://github.com/Codeinwp/themeisle-sdk/commit/065ac8e))
-* not loading licenser when SDK comes from theme [[#62](https://github.com/Codeinwp/themeisle-sdk/issues/62)] ([b706ca7](https://github.com/Codeinwp/themeisle-sdk/commit/b706ca7))
-* not loading licenser when SDK comes from theme [[#65](https://github.com/Codeinwp/themeisle-sdk/issues/65) ([419d8e6](https://github.com/Codeinwp/themeisle-sdk/commit/419d8e6))
-* preserve loaded when adding the licenser one ([cd50434](https://github.com/Codeinwp/themeisle-sdk/commit/cd50434))
-
-## [3.0.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.8...v3.0.9) (2019-06-26)
-
-
-### Bug Fixes
-
-* adds new icon for dashboard widget ([de78068](https://github.com/Codeinwp/themeisle-sdk/commit/de78068))
-* anchor element on license activation message which should link to the license field, fix [#57](https://github.com/Codeinwp/themeisle-sdk/issues/57) ([2e78856](https://github.com/Codeinwp/themeisle-sdk/commit/2e78856))
-* change uninstall feedback logo with new version, fix [#58](https://github.com/Codeinwp/themeisle-sdk/issues/58) ([2554a4f](https://github.com/Codeinwp/themeisle-sdk/commit/2554a4f))
-* remove soon to expire notice, fix https://github.com/Codeinwp/themeisle/issues/752 ([a126225](https://github.com/Codeinwp/themeisle-sdk/commit/a126225))
-
-## [3.0.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.7...v3.0.8) (2019-05-28)
-
-
-### Bug Fixes
-
-* undefined class on diff module which should check the class on global namespace ([df6bb12](https://github.com/Codeinwp/themeisle-sdk/commit/df6bb12))
-
-## [3.0.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.6...v3.0.7) (2019-05-27)
-
-
-### Bug Fixes
-
-* change store url with the new domain ([6bdbe1e](https://github.com/Codeinwp/themeisle-sdk/commit/6bdbe1e))
-
-## [3.0.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.5...v3.0.6) (2019-05-21)
-
-
-### Bug Fixes
-
-* build php version for deployment stage ([a785699](https://github.com/Codeinwp/themeisle-sdk/commit/a785699))
-* uninstall feedback should load only on the proper pages ([259e78f](https://github.com/Codeinwp/themeisle-sdk/commit/259e78f))
-
-## [3.0.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.4...v3.0.5) (2019-03-07)
-
-
-### Bug Fixes
-
-* dashboard widget issues and recommended module inconsistency fix [#50](https://github.com/Codeinwp/themeisle-sdk/issues/50), [#49](https://github.com/Codeinwp/themeisle-sdk/issues/49), [#47](https://github.com/Codeinwp/themeisle-sdk/issues/47) ([757eb02](https://github.com/Codeinwp/themeisle-sdk/commit/757eb02))
-
-## [3.0.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.3...v3.0.4) (2019-01-28)
-
-
-### Bug Fixes
-
-* uninstall feedback disclosure issues when one of the feedback fields is open ([4631eef](https://github.com/Codeinwp/themeisle-sdk/commit/4631eef))
-
-## [3.0.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.2...v3.0.3) (2019-01-07)
-
-
-### Bug Fixes
-
-* **build:** fix exit code when is running outside wordpress context ([d298bb5](https://github.com/Codeinwp/themeisle-sdk/commit/d298bb5))
-
-## [3.0.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.1...v3.0.2) (2018-12-28)
-
-
-### Bug Fixes
-
-* remove composer/installers from package requirements ([a0ad543](https://github.com/Codeinwp/themeisle-sdk/commit/a0ad543))
-
-## [3.0.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.0...v3.0.1) (2018-12-24)
-
-
-### Bug Fixes
-
-* notifications setup triggers after all products register their n… ([999a944](https://github.com/Codeinwp/themeisle-sdk/commit/999a944))
-* notifications setup triggers after all products register their notices ([ec3cacc](https://github.com/Codeinwp/themeisle-sdk/commit/ec3cacc))
-
-# 1.0.0 (2018-12-21)
-
-
-### Features
-
-* adds uninstall feedback privacy policy info ([ed17943](https://github.com/Codeinwp/themeisle-sdk/commit/ed17943))
diff --git a/vendor/codeinwp/themeisle-sdk/LICENSE b/vendor/codeinwp/themeisle-sdk/LICENSE
deleted file mode 100644
index 9cecc1d..0000000
--- a/vendor/codeinwp/themeisle-sdk/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- {one line to give the program's name and a brief idea of what it does.}
- Copyright (C) {year} {name of author}
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- {project} Copyright (C) {year} {fullname}
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-.
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/animation.jpg b/vendor/codeinwp/themeisle-sdk/assets/images/animation.jpg
deleted file mode 100644
index 0ba12f6..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/animation.jpg and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/conditions.jpg b/vendor/codeinwp/themeisle-sdk/assets/images/conditions.jpg
deleted file mode 100644
index f74b6f2..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/conditions.jpg and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/css.jpg b/vendor/codeinwp/themeisle-sdk/assets/images/css.jpg
deleted file mode 100644
index 7b1356b..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/css.jpg and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/neve.png b/vendor/codeinwp/themeisle-sdk/assets/images/neve.png
deleted file mode 100644
index 3006122..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/neve.png and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/optimole-logo.svg b/vendor/codeinwp/themeisle-sdk/assets/images/optimole-logo.svg
deleted file mode 100644
index 6510cf1..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/images/optimole-logo.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-builder.png b/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-builder.png
deleted file mode 100644
index 9b1b790..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-builder.png and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-library.png b/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-library.png
deleted file mode 100644
index 48b38fb..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-library.png and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-patterns.png b/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-patterns.png
deleted file mode 100644
index 4c73528..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-patterns.png and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/sparks.png b/vendor/codeinwp/themeisle-sdk/assets/images/sparks.png
deleted file mode 100644
index 7224af0..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/sparks.png and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/team.jpg b/vendor/codeinwp/themeisle-sdk/assets/images/team.jpg
deleted file mode 100644
index 3bcf2ab..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/team.jpg and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/themeisle-logo.svg b/vendor/codeinwp/themeisle-sdk/assets/images/themeisle-logo.svg
deleted file mode 100644
index 4f1ab4f..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/images/themeisle-logo.svg
+++ /dev/null
@@ -1,519 +0,0 @@
-
diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/wplk.png b/vendor/codeinwp/themeisle-sdk/assets/images/wplk.png
deleted file mode 100644
index 3b19a7f..0000000
Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/wplk.png and /dev/null differ
diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.asset.php b/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.asset.php
deleted file mode 100644
index 6aa2c6c..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.asset.php
+++ /dev/null
@@ -1 +0,0 @@
- array('wp-components', 'wp-element'), 'version' => '35f2cdc94ec1bd5b9745');
diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.css b/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.css
deleted file mode 100644
index 90d7370..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.css
+++ /dev/null
@@ -1 +0,0 @@
-#wpcontent{padding-left:0 !important}.ti-about{--border: 1px solid #ccc;--link-color: var(--wp-admin-theme-color);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:normal;display:grid;gap:30px}.ti-about .container{margin:0 auto;max-width:960px;padding:0 15px}.ti-about p{font-size:14px;line-height:1.6}.ti-about button{font-weight:600}.ti-about .spin{animation:spin 1s infinite linear}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ti-about .head{background:#fff;border-bottom:var(--border);padding:18px 0}.ti-about .head .container{padding:0 15px;display:flex;flex-wrap:wrap;align-items:center}.ti-about .head img{max-height:55px}.ti-about .head p{margin-left:10px}.ti-about .head a{font-style:italic;font-weight:bold}.ti-about .nav{border-bottom:var(--border);display:flex;flex-wrap:wrap;font-size:16px;margin:0;font-weight:600;-moz-column-gap:20px;column-gap:20px}.ti-about .nav a{border-bottom:4px solid rgba(0,0,0,0);color:#868686;padding:20px 10px;text-decoration:none;margin-bottom:-1px;box-sizing:border-box}.ti-about .nav a:hover{color:#313233}.ti-about .nav li{display:flex;margin:0}.ti-about .nav li.active a{border-color:var(--link-color);color:#313233}.ti-about .story-card .footer,.ti-about .story-card .body{display:grid;grid-template-columns:var(--grid, 1fr);align-items:center}.ti-about .story-card{border:var(--border);border-radius:0 0 10px 10px}.ti-about .story-card .body{background:#fff;padding:35px 35px 10px 35px}.ti-about .story-card .body h2{font-size:30px;margin:0 0 30px;color:#1f1d1d}.ti-about .story-card .body p{color:#1e1e1e}.ti-about .story-card .body figure{order:0;margin:0}.ti-about .story-card .body figcaption{margin:10px 0;color:#797979;font-size:12px}.ti-about .story-card .body img{border-radius:8px;max-width:100%}.ti-about .story-card .footer{border-top:var(--border);padding:30px 40px}.ti-about .story-card .footer h2{margin:0 0 20px;text-align:center;font-size:21px}.ti-about .story-card form{display:flex;align-items:center}.ti-about .story-card form .dashicons-yes-alt{color:#609952}.ti-about .story-card input{height:36px;flex-grow:1;border:var(--border);border-radius:2px;font-size:12px;margin-right:15px}.ti-about .product-cards{display:grid;gap:30px}.ti-about .product-card{background:#fff;display:grid;border:var(--border)}.ti-about .product-card h2{font-size:21px;margin:0}.ti-about .product-card p{margin:0;color:#6c6c6c}.ti-about .product-card .header{padding:20px 15px 0;display:flex;align-items:center}.ti-about .product-card .body{padding:20px 15px}.ti-about .product-card img{max-width:50px;margin-right:15px;border-radius:6px}.ti-about .product-card .footer{border-top:var(--border);display:flex;align-items:center;padding:15px;align-self:flex-end;justify-content:space-between}.ti-about .product-card .footer p{margin:8px 0;font-weight:600;font-size:13px;color:#313233}.ti-about .product-card .footer .not-installed{color:#7e7e7e}.ti-about .product-card .footer .active{color:#609952}.ti-about .product-card button,.ti-about .product-card a,.ti-about .product-card .spin{margin-left:auto;text-decoration:none}.ti-about .product-page{margin:0 auto;padding:0;width:100%;max-width:960px;border:1px solid #ccc;border-radius:8px;background-color:#fff}.ti-about .product-page .hero{display:flex;flex-direction:column;align-items:center;padding:64px;border-bottom:1px solid #ccc}.ti-about .product-page .hero h1{font-size:30px;line-height:42px;max-width:500px;text-align:center}.ti-about .product-page .hero p{font-size:14px;line-height:24px;max-width:500px;text-align:center}.ti-about .product-page .hero .logo{width:64px;margin-bottom:24px}.ti-about .product-page .hero .label{font-size:10px;line-height:12px;color:#ed6f57;background-color:rgba(237,111,87,.1803921569);padding:8px 16px;border-radius:4px}.ti-about .product-page .col-3-highlights{display:flex;flex-direction:column;justify-content:space-evenly;padding:24px 0;border-bottom:1px solid #ccc;align-items:center;text-align:center}.ti-about .product-page .col-3-highlights .col{max-width:360px}.ti-about .product-page .col-3-highlights .col h3{font-size:21px;line-height:32px;margin-bottom:8px}.ti-about .product-page .col-3-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .col-2-highlights{display:flex;flex-direction:column;justify-content:space-evenly;align-items:center;padding:24px 0;border-bottom:1px solid #ccc}.ti-about .product-page .col-2-highlights .col{width:90%}.ti-about .product-page .col-2-highlights .col img{max-width:450px;width:100%}.ti-about .product-page .col-2-highlights .col h2{font-size:24px;line-height:35px;margin-bottom:8px}.ti-about .product-page .col-2-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .button-row{display:flex;gap:12px;margin-top:48px}.ti-about .otter-blocks .testimonial-nav{display:flex;gap:8px}.ti-about .otter-blocks .testimonial-nav .testimonial-button{width:10px;height:10px;background-color:#d9d9d9;margin:0;padding:0;border-radius:50%}.ti-about .otter-blocks .testimonial-nav .testimonial-button.active{background-color:#ed6f57}.ti-about .otter-blocks .testimonial-container{width:100%;max-width:450px;display:flex;overflow-x:scroll;scroll-behavior:smooth;margin:0;padding:0}.ti-about .otter-blocks .testimonial-container::-webkit-scrollbar{display:none}.ti-about .otter-blocks .testimonial-container .testimonial{width:100%;flex:1 0 100%;display:flex;flex-wrap:wrap;justify-content:left;gap:14px;align-items:center}.ti-about .otter-blocks .testimonial-container .testimonial p{width:100%;font-size:14px;line-height:24px}.ti-about .otter-blocks .testimonial-container .testimonial h3{font-size:16px;line-height:20px;font-weight:700;color:#1c1c1c}.ti-about .otter-blocks .testimonial-container .testimonial img{width:36px;height:36px;border-radius:50%}.ti-about .otter-blocks .otter-button.is-primary{background-color:#ed6f57}.ti-about .otter-blocks .otter-button.is-secondary{color:#ed6f57;box-shadow:inset 0 0 0 1px #ed6f57}.ti-about .otter-blocks .otter-button.is-loading{background-color:#6c6c6c;color:#fff}@media (min-width: 660px){.ti-about .product-cards{grid-template-columns:1fr 1fr}.ti-about .product-page .col-3-highlights,.ti-about .product-page .col-2-highlights{flex-direction:row;padding:64px 0}.ti-about .product-page .col-3-highlights{text-align:left}.ti-about .product-page .col-3-highlights .col{max-width:200px}.ti-about .product-page .col-2-highlights .col{width:45%}}@media (min-width: 992px){.ti-about .story-card .footer,.ti-about .story-card .body{gap:60px}.ti-about .story-card{--grid: 1.1fr 1fr}.ti-about .story-card .footer h2{margin:0;text-align:left}.ti-about .product-cards{grid-template-columns:1fr 1fr 1fr}}
diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.js b/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.js
deleted file mode 100644
index 2e341ff..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){"use strict";var e=window.wp.element;function t(t){let{pages:a=[],selected:n=""}=t;const{currentProduct:l,logoUrl:s,strings:c,links:i}=window.tiSDKAboutData,r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e===n?"active":""};return(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"head"},(0,e.createElement)("div",{className:"container"},(0,e.createElement)("img",{src:s,alt:l.name}),(0,e.createElement)("p",null,"by ",(0,e.createElement)("a",{href:"https://themeisle.com"},"Themeisle")))),(i.length>0||a.length>0)&&(0,e.createElement)("div",{className:"container"},(0,e.createElement)("ul",{className:"nav"},(0,e.createElement)("li",{className:r()},(0,e.createElement)("a",{href:window.location},c.aboutUs)),a.map(((t,a)=>(0,e.createElement)("li",{className:r(t.hash),key:a},(0,e.createElement)("a",{href:t.hash},t.name)))),i.map(((t,a)=>(0,e.createElement)("li",{key:a},(0,e.createElement)("a",{href:t.url},t.text)))))))}var a=window.wp.components;function n(){const{strings:t,teamImage:n,homeUrl:l,pageSlug:s}=window.tiSDKAboutData,{heroHeader:c,heroTextFirst:i,heroTextSecond:r,teamImageCaption:o,newsHeading:m,emailPlaceholder:d,signMeUp:u}=t,[E,p]=(0,e.useState)(""),[h,g]=(0,e.useState)(!1),[v,N]=(0,e.useState)(!1);return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"story-card"},(0,e.createElement)("div",{className:"body"},(0,e.createElement)("div",null,(0,e.createElement)("h2",null,c),(0,e.createElement)("p",null,i),(0,e.createElement)("p",null,r)),(0,e.createElement)("figure",null,(0,e.createElement)("img",{src:n,alt:o}),(0,e.createElement)("figcaption",null,o))),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("h2",null,m),(0,e.createElement)("form",{onSubmit:e=>{var t;e.preventDefault(),g(!0),null===(t=fetch("https://api.themeisle.com/tracking/subscribe",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, */*;q=0.1","Cache-Control":"no-cache"},body:JSON.stringify({slug:"about-us",site:l,from:s,email:E})}).then((e=>e.json())).then((e=>{g(!1),"success"===e.code&&N(!0)})))||void 0===t||t.catch((e=>{g(!1)}))}},(0,e.createElement)("input",{disabled:h||v,type:"email",value:E,onChange:e=>{p(e.target.value)},placeholder:d}),!h&&!v&&(0,e.createElement)(a.Button,{isPrimary:!0,type:"submit"},u),h&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),v&&(0,e.createElement)("span",{className:"dashicons dashicons-yes-alt"})))))}const l=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((a=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:()=>{a({success:!0})},error:e=>{a({success:!1,code:e.errorCode})}})}))};function s(t){let{product:n,slug:s}=t;const{icon:c,name:i,description:r,status:o,premiumUrl:m,activationLink:d}=n,{strings:u,canInstallPlugins:E,canActivatePlugins:p}=window.tiSDKAboutData,{installNow:h,installed:g,notInstalled:v,active:N,activate:b,learnMore:f}=u,w=!!m,[y,k]=(0,e.useState)(o),[S,T]=(0,e.useState)(!1),D=async()=>{T(!0),await l(s,"neve"===s).then((e=>{e.success&&k("installed")})),T(!1)},x=async()=>{T(!0),window.location.href=d},_=()=>"not-installed"===y&&w?(0,e.createElement)(a.Button,{isLink:!0,icon:"external",href:m,target:"_blank"},f):"not-installed"!==y||w?"installed"===y?(0,e.createElement)(a.Button,{isSecondary:!0,onClick:x,disabled:S||!p},b):null:(0,e.createElement)(a.Button,{isPrimary:!0,onClick:D,disabled:S||!E},h),C=!E&&"not-installed"===y||!p&&"installed"===y?(0,e.createElement)(a.Tooltip,{text:`Ask your admin to enable ${i} on your site`,position:"top center"},_()):_();return(0,e.createElement)("div",{className:"product-card"},(0,e.createElement)("div",{className:"header"},c&&(0,e.createElement)("img",{src:c,alt:i}),(0,e.createElement)("h2",null,i)),(0,e.createElement)("div",{className:"body"},(0,e.createElement)("p",{dangerouslySetInnerHTML:{__html:r}})),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("p",null,"Status:"," ",(0,e.createElement)("span",{className:y},"installed"===y&&g,"not-installed"===y&&v,"active"===y&&N)),"active"!==y&&!S&&C,S&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})))}function c(){const{products:t}=window.tiSDKAboutData;return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"product-cards"},Object.keys(t).map(((a,n)=>(0,e.createElement)(s,{key:a,slug:a,product:t[a]})))))}const i={"otter-page":function(t){let{page:n={}}=t;const{products:s,canInstallPlugins:c,canActivatePlugins:i}=window.tiSDKAboutData,{strings:r,plugin:o}=n,m=n&&n.product?n.product:"",d=m&&s[m]&&s[m].icon?s[m].icon:null,[u,E]=(0,e.useState)(r.testimonials.users[0]),[p,h]=(0,e.useState)(o.status),[g,v]=(0,e.useState)(!1),N="In Progress",b=async()=>{v(!0),await l(m,!1).then((e=>{e.success&&(h("installed"),f())}))},f=async()=>{v(!0),window.location.href=o.activationLink},w=(0,e.createElement)(a.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?b:f},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})," ",N):r.buttons.install_otter_free),y=(0,e.createElement)(a.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?b:f},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),N):r.buttons.install_now),k=!c&&"not-installed"===p||!i&&"installed"===p||!1,S=t=>k?(0,e.createElement)(a.Tooltip,{text:"Ask your admin to enable Otter on your site",position:"top center"},t):t;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"hero"},d&&(0,e.createElement)("img",{className:"logo",src:d,alt:n.name||""}),(0,e.createElement)("span",{className:"label"},"Neve + Otter = New Possibilities 🤝"),(0,e.createElement)("h1",null,r.heading),(0,e.createElement)("p",null,r.text),("not-installed"===p||"installed"===p)&&S(w)),(0,e.createElement)("div",{className:"col-3-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.advancedTitle),(0,e.createElement)("p",null,r.features.advancedDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.fastTitle),(0,e.createElement)("p",null,r.features.fastDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.mobileTitle),(0,e.createElement)("p",null,r.features.mobileDesc))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s1Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s1Title),(0,e.createElement)("p",null,r.details.s1Text))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s2Title),(0,e.createElement)("p",null,r.details.s2Text)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s2Image,alt:r.details.s1Title}))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s3Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s3Title),(0,e.createElement)("p",null,r.details.s3Text))),(0,e.createElement)("div",{className:"col-2-highlights",style:{backgroundColor:"#F7F7F7",borderBottom:"none",borderBottomRightRadius:"8px",borderBottomLeftRadius:"8px"}},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.testimonials.heading),(0,e.createElement)("div",{className:"button-row"},("not-installed"===p||"installed"===p)&&S(y),(0,e.createElement)("a",{className:"components-button otter-button is-secondary",href:r.buttons.learn_more_link,target:"_blank",rel:"external noreferrer noopener"},r.buttons.learn_more))),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("div",{className:"testimonials"},(0,e.createElement)("ul",{id:"testimonial-container",className:"testimonial-container"},r.testimonials.users.map(((t,a)=>(0,e.createElement)("li",{className:"testimonial",id:"ts_"+a,key:"ts_"+a},(0,e.createElement)("p",null,'"',t.text,'"'),(0,e.createElement)("img",{src:t.avatar,alt:t.name}),(0,e.createElement)("h3",null,t.name))))),(0,e.createElement)("div",{className:"testimonial-nav"},r.testimonials.users.map(((t,n)=>(0,e.createElement)(a.Button,{className:"testimonial-button"+(t.name===u.name?" active":""),key:"button_"+n,onClick:()=>(e=>{const t=r.testimonials.users[e];document.getElementById("ts_"+e).scrollIntoView({behavior:"smooth"}),E(t)})(n)}))))))))}};function r(t){const a=i[t.id];return(0,e.createElement)(a,{page:t.page})}function o(t){let{page:a={}}=t;return(0,e.createElement)("div",{className:"product-page"+(a&&a.product?" "+a.product:"")},(0,e.createElement)(r,{id:a.id,page:a}))}const m=()=>{let e=window.location.hash;return"string"!=typeof window.location.hash?null:e};function d(){const{productPages:a}=window.tiSDKAboutData,l=a?Object.keys(a).map((e=>{const t=a[e];return t.id=e,t})):[],[s,i]=(0,e.useState)(m()),r=()=>{const e=m();null!==e&&i(e)};(0,e.useEffect)((()=>(r(),window.addEventListener("hashchange",r),()=>{window.removeEventListener("hashchange",r)})),[]);const d=l.filter((e=>e.hash===s));return d.length>0?(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(t,{pages:l,selected:s}),(0,e.createElement)(o,{page:d[0]})):(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(t,{pages:l}),(0,e.createElement)(n,null),(0,e.createElement)(c,null))}document.addEventListener("DOMContentLoaded",(()=>{const t=document.querySelector("#ti-sdk-about");t&&(0,e.render)((0,e.createElement)(d,null),t)}))}();
\ No newline at end of file
diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.asset.php b/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.asset.php
deleted file mode 100644
index 77c2d47..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.asset.php
+++ /dev/null
@@ -1 +0,0 @@
- array('wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-hooks', 'wp-plugins'), 'version' => 'bae1a40c3811e093a7be');
diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.js b/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.js
deleted file mode 100644
index b85c491..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){"use strict";var e,t={165:function(){var e=window.wp.element,t=window.wp.blockEditor,o=window.wp.components,n=window.wp.compose,i=window.wp.data,s=window.wp.hooks,r=()=>{const{createNotice:t}=(0,i.dispatch)("core/notices"),[o,n]=(0,e.useState)({}),[s,r]=(0,e.useState)("loading");return(0,i.useSelect)((e=>{if(Object.keys(o).length)return;const{getEntityRecord:t}=e("core"),i=t("root","site");i&&(r("loaded"),n(i))}),[]),[e=>null==o?void 0:o[e],async function(e,o){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Settings saved.";const s={[e]:o};try{const e=await fetch("/wp-json/wp/v2/settings",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpApiSettings.nonce},body:JSON.stringify(s)});e.ok||(r("error"),t("error","Could not save the settings.",{isDismissible:!0,type:"snackbar"}));const o=await e.json();r("loaded"),t("success",i,{isDismissible:!0,type:"snackbar"}),n(o)}catch(e){console.error("Error updating option:",e)}},s]};const a=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((o=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:()=>{o({success:!0})},error:e=>{o({success:!1,code:e.errorCode})}})}))},l=e=>new Promise((t=>{jQuery.get(e).done((()=>{t({success:!0})})).fail((()=>{t({success:!1})}))})),m=(e,t)=>{const o={};return Object.keys(t).forEach((function(e){"innerBlocks"!==e&&(o[e]=t[e])})),e.push(o),Array.isArray(t.innerBlocks)?(o.innerBlocks=t.innerBlocks.map((e=>e.id)),t.innerBlocks.reduce(m,e)):e},c={button:{display:"flex",justifyContent:"center",width:"100%"},image:{padding:"20px 0"},skip:{container:{display:"flex",flexDirection:"column",alignItems:"center"},button:{fontSize:"9px"},poweredby:{fontSize:"9px",textTransform:"uppercase"}}},d={"blocks-css":{title:"Custom CSS",description:"Enable Otter Blocks to add Custom CSS for this block.",image:"css.jpg"},"blocks-animation":{title:"Animations",description:"Enable Otter Blocks to add Animations for this block.",image:"animation.jpg"},"blocks-conditions":{title:"Visibility Conditions",description:"Enable Otter Blocks to add Visibility Conditions for this block.",image:"conditions.jpg"}},u=t=>{let{onClick:n}=t;return(0,e.createElement)("div",{style:c.skip.container},(0,e.createElement)(o.Button,{style:c.skip.button,variant:"tertiary",onClick:n},"Skip for now"),(0,e.createElement)("span",{style:c.skip.poweredby},"Recommended by ",window.themeisleSDKPromotions.product))},p=(0,n.createHigherOrderComponent)((n=>i=>{if(i.isSelected&&Boolean(window.themeisleSDKPromotions.showPromotion)){const[s,m]=(0,e.useState)(!1),[p,h]=(0,e.useState)("default"),[w,g]=(0,e.useState)(!1),[f,E,y]=r(),k=async()=>{m(!0),await a("otter-blocks"),E("themeisle_sdk_promotions_otter_installed",!Boolean(f("themeisle_sdk_promotions_otter_installed"))),await l(window.themeisleSDKPromotions.otterActivationUrl),m(!1),h("installed")},S=()=>"installed"===p?(0,e.createElement)("p",null,(0,e.createElement)("strong",null,"Awesome! Refresh the page to see Otter Blocks in action.")):(0,e.createElement)(o.Button,{variant:"secondary",onClick:k,isBusy:s,style:c.button},"Install & Activate Otter Blocks"),P=()=>{const e={...window.themeisleSDKPromotions.option};e[window.themeisleSDKPromotions.showPromotion]=(new Date).getTime()/1e3|0,E("themeisle_sdk_promotions",JSON.stringify(e)),window.themeisleSDKPromotions.showPromotion=!1};return(0,e.useEffect)((()=>{w&&P()}),[w]),w?(0,e.createElement)(n,i):(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n,i),(0,e.createElement)(t.InspectorControls,null,Object.keys(d).map((t=>{if(t===window.themeisleSDKPromotions.showPromotion){const n=d[t];return(0,e.createElement)(o.PanelBody,{key:t,title:n.title,initialOpen:!1},(0,e.createElement)("p",null,n.description),(0,e.createElement)(S,null),(0,e.createElement)("img",{style:c.image,src:window.themeisleSDKPromotions.assets+n.image}),(0,e.createElement)(u,{onClick:()=>g(!0)}))}}))))}return(0,e.createElement)(n,i)}),"withInspectorControl");(0,i.select)("core/edit-site")||(0,s.addFilter)("editor.BlockEdit","themeisle-sdk/with-inspector-controls",p);var h=window.wp.plugins,w=window.wp.editPost;function g(t){let{stacked:n=!1,noImage:i=!1,type:s,onDismiss:m,onSuccess:c,initialStatus:d=null}=t;const{assets:u,title:p,email:h,option:w,optionKey:g,optimoleActivationUrl:f,optimoleApi:E,optimoleDash:y,nonce:k}=window.themeisleSDKPromotions,[S,P]=(0,e.useState)(!1),[v,b]=(0,e.useState)(h||""),[D,B]=(0,e.useState)(!1),[O,N]=(0,e.useState)(d),[_,K]=r(),A=async()=>{B(!0);const e={...w};e[s]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await K(g,JSON.stringify(e)),m&&m()},C=()=>{P(!S)},x=e=>{b(e.target.value)},I=async e=>{e.preventDefault(),N("installing"),await a("optimole-wp"),N("activating"),await l(f),K("themeisle_sdk_promotions_optimole_installed",!Boolean(_("themeisle_sdk_promotions_optimole_installed"))),N("connecting");try{await fetch(E,{method:"POST",headers:{"X-WP-Nonce":k,"Content-Type":"application/json"},body:JSON.stringify({email:v})}),c&&c(),N("done")}catch(e){N("done")}};if(D)return null;const j=()=>"done"===O?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null,"Awesome! You are all set!"),(0,e.createElement)(o.Button,{icon:"external",isPrimary:!0,href:y,target:"_blank"},"Go to Optimole dashboard")):O?(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===O&&"Installing","activating"===O&&"Activating","connecting"===O&&"Connecting to API","…")):(0,e.createElement)(e.Fragment,null,(0,e.createElement)("span",null,"Enter your email address to create & connect your account"),(0,e.createElement)("form",{onSubmit:I},(0,e.createElement)("input",{defaultValue:v,type:"email",onChange:x,placeholder:"Email address"}),(0,e.createElement)(o.Button,{isPrimary:!0,type:"submit"},"Start using Optimole"))),F=()=>(0,e.createElement)(o.Button,{disabled:O&&"done"!==O,onClick:A,isLink:!0,className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice."));return n?(0,e.createElement)("div",{className:"ti-om-stack-wrap"},(0,e.createElement)("div",{className:"om-stack-notice"},F(),(0,e.createElement)("img",{src:u+"/optimole-logo.svg",alt:"Optimole logo"}),(0,e.createElement)("h2",null,"Get more with Optimole"),(0,e.createElement)("p",null,"om-editor"===s||"om-image-block"===s?"Increase this page speed and SEO ranking by optimizing images with Optimole.":"Leverage Optimole's full integration with Elementor to automatically lazyload, resize, compress to AVIF/WebP and deliver from 400 locations around the globe!"),!S&&"done"!==O&&(0,e.createElement)(o.Button,{isPrimary:!0,onClick:C,className:"cta"},"Get Started Free"),(S||"done"===O)&&j(),(0,e.createElement)("i",null,p))):(0,e.createElement)(e.Fragment,null,F(),(0,e.createElement)("div",{className:"content"},!i&&(0,e.createElement)("img",{src:u+"/optimole-logo.svg",alt:"Optimole logo"}),(0,e.createElement)("div",null,(0,e.createElement)("p",null,p),(0,e.createElement)("p",{className:"description"},"om-media"===s?"Save your server space by storing images to Optimole and deliver them optimized from 400 locations around the globe. Unlimited images, Unlimited traffic.":"This image looks to be too large and would affect your site speed, we recommend you to install Optimole to optimize your images."),!S&&(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(o.Button,{isPrimary:!0,onClick:C},"Get Started Free"),(0,e.createElement)(o.Button,{isLink:!0,target:"_blank",href:"https://wordpress.org/plugins/optimole-wp"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))),S&&(0,e.createElement)("div",{className:"form-wrap"},j()))))}const f=()=>{const[t,o]=(0,e.useState)(!0),{getBlocks:n}=(0,i.useSelect)((e=>{const{getBlocks:t}=e("core/block-editor");return{getBlocks:t}}));var s;if((s=n(),"core/image",s.reduce(m,[]).filter((e=>"core/image"===e.name))).length<2)return null;const r="ti-sdk-optimole-post-publish "+(t?"":"hidden");return(0,e.createElement)(w.PluginPostPublishPanel,{className:r},(0,e.createElement)(g,{stacked:!0,type:"om-editor",onDismiss:()=>{o(!1)}}))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(this.debug)this.runAll();else switch(this.promo){case"om-attachment":this.runAttachmentPromo();break;case"om-media":this.runMediaPromo();break;case"om-editor":this.runEditorPromo();break;case"om-image-block":this.runImageBlockPromo();break;case"om-elementor":this.runElementorPromo()}}runAttachmentPromo(){wp.media.view.Attachment.Details.prototype.on("ready",(()=>{setTimeout((()=>{this.removeAttachmentPromo(),this.addAttachmentPromo()}),100)})),wp.media.view.Modal.prototype.on("close",(()=>{setTimeout(this.removeAttachmentPromo,100)}))}runMediaPromo(){if(window.themeisleSDKPromotions.option["om-media"])return;const t=document.querySelector("#ti-optml-notice");t&&(0,e.render)((0,e.createElement)(g,{type:"om-media",onDismiss:()=>{t.style.opacity=0}}),t)}runImageBlockPromo(){if(window.themeisleSDKPromotions.option["om-image-block"])return;let o=!0,i=null;const r=(0,n.createHigherOrderComponent)((n=>s=>"core/image"===s.name&&o?(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n,s),(0,e.createElement)(t.InspectorControls,null,(0,e.createElement)(g,{stacked:!0,type:"om-image-block",initialStatus:i,onDismiss:()=>{o=!1},onSuccess:()=>{i="done"}}))):(0,e.createElement)(n,s)),"withImagePromo");(0,s.addFilter)("editor.BlockEdit","optimole-promo/image-promo",r,99)}runEditorPromo(){window.themeisleSDKPromotions.option["om-editor"]||(0,h.registerPlugin)("optimole-promo",{render:f})}runElementorPromo(){if(!window.elementor)return;const t=this;elementor.on("preview:loaded",(()=>{elementor.panel.currentView.on("set:page:editor",(o=>{t.domRef&&(0,e.unmountComponentAtNode)(t.domRef),o.activeSection&&"section_image"===o.activeSection&&t.runElementorActions(t)}))}))}addAttachmentPromo(){if(this.domRef&&(0,e.unmountComponentAtNode)(this.domRef),window.themeisleSDKPromotions.option["om-attachment"])return;const t=document.querySelector("#ti-optml-notice-helper");t&&(this.domRef=t,(0,e.render)((0,e.createElement)("div",{className:"notice notice-info ti-sdk-om-notice",style:{margin:0}},(0,e.createElement)(g,{noImage:!0,type:"om-attachment",onDismiss:()=>{t.style.opacity=0}})),t))}removeAttachmentPromo(){const t=document.querySelector("#ti-optml-notice-helper");t&&(0,e.unmountComponentAtNode)(t)}runElementorActions(t){if(window.themeisleSDKPromotions.option["om-elementor"])return;const o=document.querySelector("#elementor-panel__editor__help"),n=document.createElement("div");n.id="ti-optml-notice",t.domRef=n,o&&(o.parentNode.insertBefore(n,o),(0,e.render)((0,e.createElement)(g,{stacked:!0,type:"om-elementor",onDismiss:()=>{n.style.opacity=0}}),n))}runAll(){this.runAttachmentPromo(),this.runMediaPromo(),this.runEditorPromo(),this.runImageBlockPromo(),this.runElementorPromo()}};const E=t=>{let{onDismiss:n=(()=>{})}=t;const[i,s]=(0,e.useState)(""),[m,c]=r();return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o.Button,{disabled:"installing"===i,onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["rop-posts"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await c(window.themeisleSDKPromotions.optionKey,JSON.stringify(e)),n&&n()},variant:"link",className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice.")),(0,e.createElement)("p",null,"Boost your content's reach effortlessly! Introducing ",(0,e.createElement)("b",null,"Revive Old Posts"),", a cutting-edge plugin from the makers of ",window.themeisleSDKPromotions.product,". Seamlessly auto-share old & new content across social media, driving traffic like never before."),(0,e.createElement)("div",{className:"rop-notice-actions"},"installed"!==i?(0,e.createElement)(o.Button,{variant:"primary",isBusy:"installing"===i,onClick:async()=>{s("installing"),await a("tweet-old-post"),await l(window.themeisleSDKPromotions.ropActivationUrl),c("themeisle_sdk_promotions_rop_installed",!Boolean(m("themeisle_sdk_promotions_rop_installed"))),s("installed")}},"Install & Activate"):(0,e.createElement)(o.Button,{variant:"primary",href:window.themeisleSDKPromotions.ropDash},"Visit Dashboard"),(0,e.createElement)(o.Button,{variant:"link",target:"_blank",href:"https://wordpress.org/plugins/tweet-old-post/"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["rop-posts"])return;const t=document.querySelector("#ti-rop-notice");t&&(0,e.render)((0,e.createElement)(E,{onDismiss:()=>{t.style.display="none"}}),t)}};const y=t=>{let{onDismiss:n=(()=>{})}=t;const[i,s]=r(),{neveFSEMoreUrl:a}=window.themeisleSDKPromotions;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o.Button,{onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["neve-fse-themes-popular"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await s(window.themeisleSDKPromotions.optionKey,JSON.stringify(e)),n&&n()},className:"notice-dismiss"},(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice.")),(0,e.createElement)("p",null,"Meet ",(0,e.createElement)("b",null,"Neve FSE")," from the makers of ",window.themeisleSDKPromotions.product,". A theme that makes full site editing on WordPress straightforward and user-friendly."),(0,e.createElement)("div",{className:"neve-fse-notice-actions"},(0,e.createElement)(o.Button,{variant:"link",target:"_blank",href:a},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["neve-fse-themes-popular"])return;const t=document.querySelector("#ti-neve-fse-notice");t&&(0,e.render)((0,e.createElement)(y,{onDismiss:()=>{t.style.display="none"}}),t)}}}},o={};function n(e){var i=o[e];if(void 0!==i)return i.exports;var s=o[e]={exports:{}};return t[e](s,s.exports,n),s.exports}n.m=t,e=[],n.O=function(t,o,i,s){if(!o){var r=1/0;for(c=0;c=s)&&Object.keys(n.O).every((function(e){return n.O[e](o[l])}))?o.splice(l--,1):(a=!1,s0&&e[c-1][2]>s;c--)e[c]=e[c-1];e[c]=[o,i,s]},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={826:0,431:0};n.O.j=function(t){return 0===e[t]};var t=function(t,o){var i,s,r=o[0],a=o[1],l=o[2],m=0;if(r.some((function(t){return 0!==e[t]}))){for(i in a)n.o(a,i)&&(n.m[i]=a[i]);if(l)var c=l(n)}for(t&&t(o);mspan{display:none}.ti-om-stack-wrap .om-stack-notice img{max-width:90px !important}.ti-om-stack-wrap .om-stack-notice h2{font-size:18px;margin:30px auto 10px;font-weight:600}.ti-om-stack-wrap .om-stack-notice p{font-size:13px;max-width:250px;margin:0 auto;line-height:17px}.ti-om-stack-wrap .om-stack-notice i{margin-top:10px;font-size:12px;color:#757575}.ti-om-stack-wrap .om-stack-notice .cta{margin:20px auto 0;padding:10px 25px !important}.ti-om-stack-wrap .om-stack-notice .om-notice-dismiss{color:inherit}.ti-om-stack-wrap .om-stack-notice input{border-radius:0}.ti-om-stack-wrap .om-stack-notice form{place-items:center;width:75%;display:grid;margin-top:10px;gap:10px}.ti-om-stack-wrap .om-stack-notice .done{margin-top:15px;display:grid;gap:10px}.ti-om-stack-wrap .om-stack-notice .done p{font-size:15px;font-weight:500}.ti-om-stack-wrap .om-stack-notice .om-progress{margin:20px 0}.block-editor-block-inspector .ti-om-stack-wrap{border-top:1px solid #e0e0e0}.om-progress{gap:5px;font-size:14px;display:flex;align-items:center}.om-progress .spin{animation:om-rotation 2s infinite linear}@keyframes om-rotation{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ti-sdk-om-promo.hidden{display:none}.media-sidebar .ti-sdk-om-notice input{min-width:unset;flex-grow:1}.media-sidebar .ti-sdk-om-notice .description{margin-bottom:10px}.media-sidebar .ti-sdk-om-notice .content{padding:15px 10px}.media-sidebar .ti-sdk-om-notice .actions{gap:10px}.media-sidebar .ti-sdk-om-notice form{flex-wrap:wrap;justify-content:center}.attachment-info .ti-sdk-om-notice input{min-width:unset;flex-grow:1}.attachment-info .ti-sdk-om-notice form{flex-wrap:wrap;justify-content:center}.ti-sdk-rop-notice{position:relative;padding:10px}.ti-sdk-rop-notice .rop-notice-actions{display:flex;gap:10px}.ti-sdk-rop-notice p{padding:0 10px 0 0}.ti-sdk-neve-fse-notice{position:relative;padding:10px}.ti-sdk-neve-fse-notice .neve-fse-notice-actions{display:flex;gap:10px}.ti-sdk-neve-fse-notice .neve-fse-notice-actions a{text-decoration:none}.ti-sdk-neve-fse-notice .neve-fse-notice-actions a span:not(.dashicons){text-decoration:underline}.ti-sdk-neve-fse-notice p{padding:0 10px 0 0;font-size:14px}@media screen and (min-width: 768px){.ti-sdk-om-notice img{display:block}}@media screen and (min-width: 1200px){.attachment-info .ti-sdk-om-notice form{flex-wrap:unset}}
diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.asset.php b/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.asset.php
deleted file mode 100644
index 266568d..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.asset.php
+++ /dev/null
@@ -1 +0,0 @@
- array(), 'version' => '7eac74bcd8abf2e43780');
diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.js b/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.js
deleted file mode 100644
index 9025518..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e=Object.defineProperty,t=(t,n,s)=>(((t,n,s)=>{n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[n]=s})(t,"symbol"!=typeof n?n+"":n,s),s);const n=e=>({ok:!1,error:e});async function s(e,t,s,i){const r=new URL(t,e),o=JSON.stringify(i),a=(d=fetch,(...e)=>{try{return{ok:!0,data:d(...e)}}catch(e){return{ok:!1,error:e}}})(r.toString(),{method:s,headers:{"Content-Type":"application/json"},body:o});var d;if(!1===a.ok)return n(a.error);const c=await a.data,{data:u}=await c.json();return c.ok?(e=>({ok:!0,data:e}))(u):n({code:"network_error",message:c.statusText,status:c.status,url:r})}class i{constructor(e,t){this.apiHost=e,this.environmentId=t}async create(e){return s(this.apiHost,`/api/v1/client/${this.environmentId}/actions`,"POST",e)}}class r{constructor(e,t){this.apiHost=e,this.environmentId=t}async create(e){return s(this.apiHost,`/api/v1/client/${this.environmentId}/displays`,"POST",e)}async update(e,t){return s(this.apiHost,`/api/v1/client/${this.environmentId}/displays/${e}`,"PUT",t)}}class o{constructor(e,t){this.apiHost=e,this.environmentId=t}async create(e){return s(this.apiHost,`/api/v1/client/${this.environmentId}/people`,"POST",{environmentId:this.environmentId,userId:e})}async update(e,t){return s(this.apiHost,`/api/v1/client/${this.environmentId}/people/${e}`,"POST",t)}}class a{constructor(e,t){this.apiHost=e,this.environmentId=t}async create(e){return s(this.apiHost,`/api/v1/client/${this.environmentId}/responses`,"POST",e)}async update({responseId:e,finished:t,data:n,ttc:i}){return s(this.apiHost,`/api/v1/client/${this.environmentId}/responses/${e}`,"PUT",{finished:t,data:n,ttc:i})}}class d{constructor(e,t){this.apiHost=e,this.environmentId=t}async uploadFile(e,{allowedFileExtensions:t,surveyId:n}={}){if(!(e instanceof Blob&&e instanceof File))throw new Error("Invalid file type. Expected Blob or File, but received "+typeof e);const s={fileName:e.name,fileType:e.type,allowedFileExtensions:t,surveyId:n},i=await fetch(`${this.apiHost}/api/v1/client/${this.environmentId}/storage`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!i.ok)throw new Error(`Upload failed with status: ${i.status}`);const r=await i.json(),{data:o}=r,{signedUrl:a,fileUrl:d,signingData:c,presignedFields:u,updatedFileName:l}=o;let g={};if(c){const{signature:t,timestamp:s,uuid:i}=c;g={"X-File-Type":e.type,"X-File-Name":encodeURIComponent(l),"X-Survey-ID":n??"","X-Signature":t,"X-Timestamp":String(s),"X-UUID":i}}const p=new FormData;u&&Object.keys(u).forEach((e=>{p.append(e,u[e])})),p.append("file",e);const h=await fetch(a,{method:"POST",...c?{headers:g}:{},body:p});if(!h.ok){if(c){const e=await h.json(),t=new Error(e.message);throw t.name="FileTooLargeError",t}const e=await h.text();if(u&&e&&e.includes("EntityTooLarge")){const e=new Error("File size exceeds the size limit for your plan");throw e.name="FileTooLargeError",e}throw new Error(`Upload failed with status: ${h.status}`)}return d}}class c{constructor(e){const{apiHost:t,environmentId:n}=e;this.response=new a(t,n),this.display=new r(t,n),this.action=new i(t,n),this.people=new o(t,n),this.storage=new d(t,n)}}class u{constructor(e){this.client=new c(e)}}class l{constructor(){this.logLevel="error"}static getInstance(){return l.instance||(l.instance=new l),l.instance}configure(e){e&&void 0!==e.logLevel&&(this.logLevel=e.logLevel)}logger(e,t){if("debug"===t&&"debug"!==this.logLevel)return;const n=`🧱 Formbricks - ${(new Date).toISOString()} [${t.toUpperCase()}] - ${e}`;"error"===t?console.error(n):console.log(n)}debug(e){this.logger(e,"debug")}error(e){this.logger(e,"error")}}const g=e=>({ok:!0,value:e}),p=e=>({ok:!1,error:e}),h=e=>(...t)=>{try{return{ok:!0,value:e(...t)}}catch(e){return{ok:!1,error:e}}},v=l.getInstance(),f=class e{constructor(e){this.customized=!1,e?(this.handleError=e,this.customized=!0):this.handleError=e=>l.getInstance().error(JSON.stringify(e))}static getInstance(){return e.instance||(e.instance=new e),e.instance}static init(t){this.initialized=!0,e.instance=new e(t)}printStatus(){v.debug("Custom error handler: "+(this.customized?"yes":"no"))}handle(e){console.warn("🧱 Formbricks - Global error: ",e),this.handleError(e)}};f.initialized=!1;let w=f;const y="formbricks-js";class m{constructor(){this.config=null;const e=this.loadFromLocalStorage();e.ok&&(this.config=e.value)}static getInstance(){return m.instance||(m.instance=new m),m.instance}update(e){if(e){const t=new Date((new Date).getTime()+12e4);this.config={...this.config,...e,expiresAt:t},this.saveToLocalStorage()}}get(){if(!this.config)throw new Error("config is null, maybe the init function was not called?");return this.config}loadFromLocalStorage(){if("undefined"!=typeof window){const e=localStorage.getItem(y);if(e){const t=JSON.parse(e);return t.expiresAt&&new Date(t.expiresAt)<=new Date?p(new Error("Config in local storage has expired")):g(JSON.parse(e))}}return p(new Error("No or invalid config in local storage"))}saveToLocalStorage(){return h((()=>localStorage.setItem(y,JSON.stringify(this.config))))()}resetConfig(){return this.config=null,h((()=>localStorage.removeItem(y)))()}}const I=(e,t)=>{const n=Math.abs(t.getTime()-e.getTime());return Math.floor(n/864e5)},b=()=>window.location.search.includes("formbricksDebug=true"),k=m.getInstance(),S=l.getInstance();let E=null;const H=async(e,t=!1)=>{var n;try{const s=await(async({apiHost:e,environmentId:t,userId:n},s)=>{const i=`${e}/api/v1/client/${t}/in-app/sync`,r="?version=1.6.0";let o={};if((s||b())&&(o.cache="no-cache",S.debug("No cache option set for sync")),!n){const e=i+r,t=await fetch(e,o);if(!t.ok){const n=await t.json();return p({code:"network_error",status:t.status,message:"Error syncing with backend",url:e,responseMessage:n.message})}return g((await t.json()).data)}const a=`${i}/${n}${r}`,d=await fetch(a,o);if(!d.ok){const e=await d.json();return p({code:"network_error",status:d.status,message:"Error syncing with backend",url:a,responseMessage:e.message})}const c=await d.json(),{data:u}=c;return g(u)})(e,t);if(!0!==(null==s?void 0:s.ok))throw S.error(`Sync failed: ${JSON.stringify(s.error)}`),s.error;let i;try{i=k.get().state}catch(e){}let r={surveys:s.value.surveys,noCodeActionClasses:s.value.noCodeActionClasses,product:s.value.product,attributes:(null==(n=s.value.person)?void 0:n.attributes)||{}};if(e.userId){const e=r.surveys.map((e=>e.name));S.debug("Fetched "+e.length+" surveys during sync: "+e.join(", "))}else{r={...r,displays:(null==i?void 0:i.displays)||[]},r=C(r);const e=r.surveys.map((e=>e.name));S.debug("Fetched "+e.length+" surveys during sync: "+e.join(", "))}k.update({apiHost:e.apiHost,environmentId:e.environmentId,userId:e.userId,state:r})}catch(e){throw S.error(`Error during sync: ${e}`),e}},C=e=>{const{displays:t,product:n}=e;let{surveys:s}=e;if(!t)return e;let i=s.filter((e=>{if("respondMultiple"===e.displayOption)return!0;if("displayOnce"===e.displayOption)return 0===t.filter((t=>t.surveyId===e.id)).length;if("displayMultiple"===e.displayOption)return 0===t.filter((t=>t.surveyId===e.id&&t.responded)).length;throw Error("Invalid displayOption")}));const r=t.length>0?t[t.length-1]:void 0;return i=i.filter((e=>{if(r){if(null!==e.recontactDays){const n=t.filter((t=>t.surveyId===e.id))[0];return!n||I(new Date,new Date(n.createdAt))>=e.recontactDays}return null===n.recontactDays||I(new Date,new Date(r.createdAt))>=n.recontactDays}return!0})),{...e,surveys:i}},$=()=>{"undefined"!=typeof window&&null!==E&&(window.clearInterval(E),E=null)},A=e=>new Promise((t=>setTimeout(t,e)));class L{constructor(e,n){t(this,"queue",[]),t(this,"config"),t(this,"surveyState"),t(this,"isRequestInProgress",!1),t(this,"api"),this.config=e,this.surveyState=n,this.api=new u({apiHost:e.apiHost,environmentId:e.environmentId})}add(e){this.surveyState.accumulateResponse(e),this.config.setSurveyState&&this.config.setSurveyState(this.surveyState),this.queue.push(e),this.processQueue()}async processQueue(){if(this.isRequestInProgress)return;if(0===this.queue.length)return;this.isRequestInProgress=!0;const e=this.queue[0];let t=0;for(;t=this.config.retryAttempts?(console.error("Failed to send response after 2 attempts."),this.config.onResponseSendingFailed&&this.config.onResponseSendingFailed(e),this.isRequestInProgress=!1):(this.isRequestInProgress=!1,this.processQueue())}async sendResponse(e){try{if(null!==this.surveyState.responseId)await this.api.client.response.update({...e,responseId:this.surveyState.responseId});else{const t=await this.api.client.response.create({...e,surveyId:this.surveyState.surveyId,userId:this.surveyState.userId||null,singleUseId:this.surveyState.singleUseId||null});if(!t.ok)throw new Error("Could not create response");if(this.surveyState.displayId)try{await this.api.client.display.update(this.surveyState.displayId,{responseId:t.data.id})}catch(e){console.error("Failed to update display, proceeding with the response.",e)}this.surveyState.updateResponseId(t.data.id),this.config.setSurveyState&&this.config.setSurveyState(this.surveyState)}return!0}catch(e){return console.error(e),!1}}updateSurveyState(e){this.surveyState=e}}class F{constructor(e,n,s,i){t(this,"responseId",null),t(this,"displayId",null),t(this,"userId",null),t(this,"surveyId"),t(this,"responseAcc",{finished:!1,data:{},ttc:{}}),t(this,"singleUseId"),this.surveyId=e,this.userId=i??null,this.singleUseId=n??null,this.responseId=s??null}setSurveyId(e){this.surveyId=e,this.clear()}copy(){const e=new F(this.surveyId,this.singleUseId??void 0,this.responseId??void 0,this.userId??void 0);return e.responseId=this.responseId,e.responseAcc=this.responseAcc,e}updateResponseId(e){this.responseId=e}updateDisplayId(e){this.displayId=e}updateUserId(e){this.userId=e}accumulateResponse(e){this.responseAcc={finished:e.finished,ttc:e.ttc,data:{...this.responseAcc.data,...e.data}}}isResponseFinished(){return this.responseAcc.finished}clear(){this.responseId=null,this.responseAcc={finished:!1,data:{},ttc:{}}}}const O=F,U="formbricks-web-container",D=m.getInstance(),P=l.getInstance(),T=w.getInstance();let x=!1,N=e=>{};const R=async e=>{if(x)return void P.debug("A survey is already running. Skipping.");x=!0,e.delay&&P.debug(`Delaying survey by ${e.delay} seconds.`);const t=D.get().state.product,n=new O(e.id,null,null,D.get().userId),s=new L({apiHost:D.get().apiHost,environmentId:D.get().environmentId,retryAttempts:2,onResponseSendingFailed:()=>{N(!0)}},n),i=e.productOverwrites??{},r=i.brandColor??t.brandColor,o=i.highlightBorderColor??t.highlightBorderColor,a=i.clickOutsideClose??t.clickOutsideClose,d=i.darkOverlay??t.darkOverlay,c=i.placement??t.placement,l=t.inAppSurveyBranding,g=await M();setTimeout((()=>{g.renderSurveyModal({survey:e,brandColor:r,isBrandingEnabled:l,clickOutside:a,darkOverlay:d,highlightBorderColor:o,placement:c,getSetIsError:e=>{N=e},onDisplay:async()=>{const{userId:t}=D.get();if(!t){const t={createdAt:new Date,surveyId:e.id,responded:!1},n=D.get().state.displays,s=n?[...n,t]:[t],i=D.get();let r=C({...i.state,displays:s});D.update({...i,state:r})}const i=new u({apiHost:D.get().apiHost,environmentId:D.get().environmentId}),r=await i.client.display.create({surveyId:e.id,userId:t});if(!r.ok)throw new Error("Could not create display");const{id:o}=r.data;n.updateDisplayId(o),s.updateSurveyState(n)},onResponse:e=>{const{userId:t}=D.get();if(!t){const e=D.get().state.displays,t=e&&e[e.length-1];if(!t)throw new Error("No lastDisplay found");if(!t.responded){t.responded=!0;const n=D.get();let s=C({...n.state,displays:e});D.update({...n,state:s})}}t&&n.updateUserId(t),s.updateSurveyState(n),s.add({data:e.data,ttc:e.ttc,finished:e.finished})},onClose:z,onFileUpload:async(e,t)=>{const n=new u({apiHost:D.get().apiHost,environmentId:D.get().environmentId});return await n.client.storage.uploadFile(e,t)},onRetry:()=>{N(!1),s.processQueue()}})}),1e3*e.delay)},z=async()=>{var e;if(null==(e=document.getElementById(U))||e.remove(),j(),!D.get().userId){const e=D.get().state,t=C(e);return D.update({...D.get(),state:t}),void(x=!1)}try{await H({apiHost:D.get().apiHost,environmentId:D.get().environmentId,userId:D.get().userId},!0),x=!1}catch(e){T.handle(e)}},j=()=>{const e=document.createElement("div");e.id=U,document.body.appendChild(e)},M=()=>new Promise(((e,t)=>{if(window.formbricksSurveys)e(window.formbricksSurveys);else{const n=document.createElement("script");n.src="https://unpkg.com/@formbricks/surveys@^1.6.0/dist/index.umd.js",n.async=!0,n.onload=()=>e(window.formbricksSurveys),n.onerror=e=>{console.error("Failed to load Formbricks Surveys library:",e),t(e)},document.head.appendChild(n)}})),q=l.getInstance(),_=m.getInstance(),B=["Exit Intent (Desktop)","50% Scroll"],J=async e=>{var t;const{userId:n,state:{surveys:s=[]}}=_.get();s.forEach((async t=>{const{inlineTriggers:n}=t,{codeConfig:s}=n??{};e!==(null==s?void 0:s.identifier)||await R(t)}));const i={environmentId:_.get().environmentId,userId:n,name:e};if(n&&!B.includes(e)){q.debug(`Sending action "${e}" to backend`);const t=new u({apiHost:_.get().apiHost,environmentId:_.get().environmentId}),s=await t.client.action.create({...i,userId:n});if(!s.ok)return p({code:"network_error",message:`Error tracking action ${e}`,status:500,url:`${_.get().apiHost}/api/v1/client/${_.get().environmentId}/actions`,responseMessage:s.error.message});b()&&await H({environmentId:_.get().environmentId,apiHost:_.get().apiHost,userId:n},!0)}q.debug(`Formbricks: Action "${e}" tracked`);const r=null==(t=_.get().state)?void 0:t.surveys;return r&&r.length>0?await X(e,r):q.debug("No active surveys to display"),{ok:!0,value:void 0}},X=async(e,t)=>{for(const s of t)if(!s.displayPercentage||(n=s.displayPercentage,Math.floor(100*Math.random())+1<=n)){for(const t of s.triggers)if(t===e)return q.debug(`Formbricks: survey ${s.id} triggered by action "${e}"`),void await R(s)}else q.debug("Survey display skipped based on displayPercentage.");var n},Q=e=>async(...t)=>{try{return{ok:!0,data:await e(...t)}}catch(e){return{ok:!1,error:e}}};let W=!1,Y=async function(e){if(e.clientY<=0){const e=await J("Exit Intent (Desktop)");if(!0!==e.ok)return p(e.error)}};const G=()=>{W&&(document.removeEventListener("mouseleave",Y),W=!1)};let K=!1,V=!1,Z=async()=>{const e=window.scrollY,t=window.innerHeight,n=document.documentElement.scrollHeight;if(0===e&&(V=!1),!V&&e/(n-t)>=.5){V=!0;const e=await J("50% Scroll");if(!0!==e.ok)return p(e.error)}};const ee=()=>{K&&(window.removeEventListener("scroll",Z),K=!1)},te=m.getInstance(),ne=l.getInstance(),se=w.getInstance(),ie=async()=>{var e;ne.debug(`Checking page url: ${window.location.href}`);const{state:t}=te.get(),{noCodeActionClasses:n=[],surveys:s=[]}=t??{},i=n.filter((e=>{const{innerHtml:t,cssSelector:n,pageUrl:s}=e.noCodeConfig||{};return s&&!t&&!n})),r=s.filter((e=>{var t;const{pageUrl:n,cssSelector:s,innerHtml:i}=(null==(t=e.inlineTriggers)?void 0:t.noCodeConfig)||{};return n&&!s&&!i}));if(i.length>0)for(const t of i){if(!(null==(e=t.noCodeConfig)?void 0:e.pageUrl))continue;const{noCodeConfig:{pageUrl:n}}=t,s=de(window.location.href,n.value,n.rule);if(!0!==s.ok)return p(s.error);if(!1===s.value)continue;const i=await J(t.name);if(!0!==i.ok)return p(i.error)}return r.length>0&&r.forEach((e=>{const{noCodeConfig:t}=e.inlineTriggers??{},{pageUrl:n}=t??{};if(n){const t=de(window.location.href,n.value,n.rule);if(!0!==t.ok)return p(t.error);R(e)}})),{ok:!0,value:void 0}};let re=!1;const oe=()=>ie(),ae=()=>{"undefined"!=typeof window&&re&&(window.removeEventListener("hashchange",oe),window.removeEventListener("popstate",oe),window.removeEventListener("pushstate",oe),window.removeEventListener("replacestate",oe),window.removeEventListener("load",oe),re=!1)};function de(e,t,n){switch(n){case"exactMatch":return g(e===t);case"contains":return g(e.includes(t));case"startsWith":return g(e.startsWith(t));case"endsWith":return g(e.endsWith(t));case"notMatch":return g(e!==t);case"notContains":return g(!e.includes(t));default:return p({code:"invalid_match_type",message:"Invalid match type"})}}const ce=(e,t)=>{var n,s,i,r,o,a,d,c;const u=null==(s=null==(n=t.noCodeConfig)?void 0:n.innerHtml)?void 0:s.value,l=null==(r=null==(i=t.noCodeConfig)?void 0:i.cssSelector)?void 0:r.value,g=null==(a=null==(o=t.noCodeConfig)?void 0:o.pageUrl)?void 0:a.value,p=null==(c=null==(d=t.noCodeConfig)?void 0:d.pageUrl)?void 0:c.rule;if(!u&&!l&&!g)return!1;if(u&&e.innerHTML!==u)return!1;if(l){const t=l.split(/\s*(?=[.#])/);for(let n of t)if(!e.matches(n))return!1}if(g&&p){const e=de(window.location.href,g,p);if(!e.ok||!e.value)return!1}return!0};let ue=!1;const le=e=>(e=>{const{state:t}=te.get();if(!t)return;const{noCodeActionClasses:n}=t;if(!n)return;const s=e.target;n.forEach((e=>{ce(s,e)&&J(e.name).then((e=>{var t,n;n=e=>{se.handle(e)},!0===(t=e).ok?t.value:n(t.error)}))}));const i=t.surveys;i&&0!==i.length&&i.forEach((e=>{const{inlineTriggers:t}=e;t&&ce(s,t)&&R(e)}))})(e),ge=()=>{ue&&(document.removeEventListener("click",le),ue=!1)};let pe=!1;const he=m.getInstance(),ve=l.getInstance(),fe=async()=>(ve.error("'setUserId' is no longer supported. Please set the userId in the init call instead."),{ok:!0,value:void 0}),we=async(e,t)=>{if(ve.debug("Setting attribute: "+e+" to value: "+t),((e,t)=>he.get().state.attributes[e]===t)(e,t.toString()))return ve.debug("Attribute already set to this value. Skipping update."),{ok:!0,value:void 0};const n=await(async(e,t)=>{const{apiHost:n,environmentId:s,userId:i}=he.get();if(!i)return p({code:"missing_person",message:"Unable to update attribute. User identification deactivated. No userId set."});const r={attributes:{[e]:t}},o=new u({apiHost:n,environmentId:s}),a=await o.client.people.update(i,r);return a.ok?(a.data.changed&&(ve.debug("Attribute updated. Syncing..."),await H({environmentId:s,apiHost:n,userId:i},!0)),{ok:!0,value:void 0}):p({code:"network_error",status:500,message:`Error updating person with userId ${i}`,url:`${he.get().apiHost}/api/v1/client/${s}/people/${i}`,responseMessage:a.error.message})})(e,t.toString());return n.ok?(he.update({environmentId:he.get().environmentId,apiHost:he.get().apiHost,userId:he.get().userId,state:{...he.get().state,attributes:{...he.get().state.attributes,[e]:t.toString()}}}),{ok:!0,value:void 0}):p(n.error)},ye=async()=>{Ee()},me=async()=>{ve.debug("Resetting state & getting new state from backend"),z();const e={environmentId:he.get().environmentId,apiHost:he.get().apiHost,userId:he.get().userId};await ye();try{return await Se(e),{ok:!0,value:void 0}}catch(e){return p(e)}},Ie=m.getInstance(),be=l.getInstance();let ke=!1;const Se=async e=>{if(ke)return be.debug("Already initialized, skipping initialization."),{ok:!0,value:void 0};if(b()&&be.configure({logLevel:"debug"}),w.getInstance().printStatus(),be.debug("Start initialize"),!e.environmentId)return be.debug("No environmentId provided"),p({code:"missing_field",field:"environmentId"});if(!e.apiHost)return be.debug("No apiHost provided"),p({code:"missing_field",field:"apiHost"});if(be.debug("Adding widget container to DOM"),j(),!e.userId&&e.attributes)return be.error("No userId provided but attributes. Cannot update attributes without userId."),p({code:"missing_field",field:"userId"});let t,n=null;if(e.userId&&e.attributes){const t=await(async(e,t,n,s)=>{var i,r;if(!n)return p({code:"missing_person",message:"Unable to update attribute. User identification deactivated. No userId set."});const o={...s};try{const e=null==(r=null==(i=he.get())?void 0:i.state)?void 0:r.attributes;if(e)for(const[t,n]of Object.entries(e))o[t]===n&&delete o[t]}catch(e){ve.debug("config not set; sending all attributes to backend")}if(0===Object.keys(o).length)return ve.debug("No attributes to update. Skipping update."),g(o);ve.debug("Updating attributes: "+JSON.stringify(o));const a={attributes:o},d=new u({apiHost:e,environmentId:t}),c=await d.client.people.update(n,a);return c.ok?g(o):p({code:"network_error",status:500,message:`Error updating person with userId ${n}`,url:`${e}/api/v1/client/${t}/people/${n}`,responseMessage:c.error.message})})(e.apiHost,e.environmentId,e.userId,e.attributes);if(!0!==t.ok)return p(t.error);n=t.value}try{t=Ie.get()}catch(e){be.debug("No existing configuration found.")}return t&&t.state&&t.environmentId===e.environmentId&&t.apiHost===e.apiHost&&t.userId===e.userId&&t.expiresAt?(be.debug("Found existing configuration."),t.expiresAt0&&Ie.update({environmentId:Ie.get().environmentId,apiHost:Ie.get().apiHost,userId:Ie.get().userId,state:{...Ie.get().state,attributes:{...Ie.get().state.attributes,...e.attributes}}}),be.debug("Adding event listeners"),"undefined"!=typeof window&&null===E&&(E=window.setInterval((async()=>{k.get().expiresAt&&new Date(k.get().expiresAt)>=new Date||(S.debug("Config has expired. Starting sync."),await H({apiHost:k.get().apiHost,environmentId:k.get().environmentId,userId:k.get().userId}))}),3e4)),"undefined"==typeof window||re||(window.addEventListener("hashchange",oe),window.addEventListener("popstate",oe),window.addEventListener("pushstate",oe),window.addEventListener("replacestate",oe),window.addEventListener("load",oe),re=!0),"undefined"==typeof window||ue||(document.addEventListener("click",le),ue=!0),"undefined"==typeof document||W||(document.querySelector("body").addEventListener("mouseleave",Y),W=!0),"undefined"==typeof window||K||(window.addEventListener("load",(()=>{window.addEventListener("scroll",Z)})),K=!0),pe||(window.addEventListener("beforeunload",(()=>{$(),ae(),ge(),G(),ee()})),pe=!0),ke=!0,be.debug("Initialized"),ie(),{ok:!0,value:void 0}},Ee=()=>{be.debug("Deinitializing"),z(),$(),ae(),ge(),G(),ee(),pe&&(window.removeEventListener("beforeunload",(()=>{$(),ae(),ge(),G(),ee()})),pe=!1),Ie.resetConfig(),ke=!1};l.getInstance().debug("Create command queue");const He=new class{constructor(){this.queue=[],this.running=!1,this.resolvePromise=null,this.commandPromise=null}add(e=!0,t,...n){this.queue.push({command:t,checkInitialized:e,commandArgs:n}),this.running||(this.commandPromise=new Promise((e=>{this.resolvePromise=e,this.run()})))}async wait(){this.running&&await this.commandPromise}async run(){for(this.running=!0;this.queue.length>0;){const e=w.getInstance(),t=this.queue.shift();if(!t)continue;if(t.checkInitialized){const t=(be.debug("Check if initialized"),ke&&w.initialized?{ok:!0,value:void 0}:p({code:"not_initialized",message:"Formbricks not initialized. Call initialize() first."}));t&&!0!==t.ok&&e.handle(t.error)}const n=async()=>await(null==t?void 0:t.command.apply(null,null==t?void 0:t.commandArgs)),s=await Q(n)();s&&(s.ok&&s.data&&!s.data.ok&&e.handle(s.data.error),!0!==s.ok&&e.handle(s.error))}this.running=!1,this.resolvePromise&&(this.resolvePromise(),this.resolvePromise=null,this.commandPromise=null)}},Ce=async(e,t)=>{He.add(!0,we,e,t),await He.wait()},$e={init:async e=>{w.init(e.errorHandler),He.add(!1,Se,e),await He.wait()},setUserId:async()=>{He.add(!0,fe),await He.wait()},setEmail:async e=>{Ce("email",e),await He.wait()},setAttribute:Ce,track:async(e,t={})=>{He.add(!0,J,e,t),await He.wait()},logout:async()=>{He.add(!0,ye),await He.wait()},reset:async()=>{He.add(!0,me),await He.wait()},registerRouteChange:async()=>{He.add(!0,ie),await He.wait()},getApi:()=>{const e=m.getInstance(),{environmentId:t,apiHost:n}=e.get();if(!t||!n)throw new Error("formbricks.init() must be called before getApi()");return new u({apiHost:n,environmentId:t})}};document.addEventListener("DOMContentLoaded",(()=>{window.tsdk_formbricks=$e,window.dispatchEvent(new Event("themeisle:survey:loaded"))}))})();
\ No newline at end of file
diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.asset.php b/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.asset.php
deleted file mode 100644
index 2138744..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.asset.php
+++ /dev/null
@@ -1 +0,0 @@
- array(), 'version' => 'bacc1f000efc9f479fc0');
diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.js b/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.js
deleted file mode 100644
index 6fd9153..0000000
--- a/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){var e={705:function(e){e.exports=function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){if(i)return i(s,!0);throw new Error("Cannot find module '"+s+"'")}u=n[s]={exports:{}},t[s][0].call(u.exports,(function(e){return o(t[s][1][e]||e)}),u,u.exports,e,t,n,r)}return n[s].exports}for(var i=void 0,s=0;s>16),a((65280&r)>>8),a(255&r);return 2==o?a(255&(r=f(e.charAt(n))<<2|f(e.charAt(n+1))>>4)):1==o&&(a((r=f(e.charAt(n))<<10|f(e.charAt(n+1))<<4|f(e.charAt(n+2))>>2)>>8&255),a(255&r)),i},e.fromByteArray=function(e){var t,n,r,o,i=e.length%3,s="";function u(e){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e)}for(t=0,r=e.length-i;t>18&63)+u(o>>12&63)+u(o>>6&63)+u(63&o);switch(i){case 1:s=(s+=u((n=e[e.length-1])>>2))+u(n<<4&63)+"==";break;case 2:s=(s=(s+=u((n=(e[e.length-2]<<8)+e[e.length-1])>>10))+u(n>>4&63))+u(n<<2&63)+"="}return s}}(void 0===n?this.base64js={}:n)}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(e,t,n){(function(t,r,o,i,s,u,a,f,l){var c=e("base64-js"),d=e("ieee754");function o(e,t,n){if(!(this instanceof o))return new o(e,t,n);var r,i,s,u,a=typeof e;if("base64"===t&&"string"==a)for(e=(u=e).trim?u.trim():u.replace(/^\s+|\s+$/g,"");e.length%4!=0;)e+="=";if("number"==a)r=x(e);else if("string"==a)r=o.byteLength(e,t);else{if("object"!=a)throw new Error("First argument needs to be a number, array or string.");r=x(e.length)}if(o._useTypedArrays?i=o._augment(new Uint8Array(r)):((i=this).length=r,i._isBuffer=!0),o._useTypedArrays&&"number"==typeof e.byteLength)i._set(e);else if(S(u=e)||o.isBuffer(u)||u&&"object"==typeof u&&"number"==typeof u.length)for(s=0;s>>0)):(t+1>>0),o}function g(e,t,n,r){if(r||(Y("boolean"==typeof n,"missing or invalid endian"),Y(null!=t,"missing offset"),Y(t+1>>8*(r?i:1-i)}function m(e,t,n,r,o){if(o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+3>>8*(r?i:3-i)&255}function _(e,t,n,r,o){o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+1>8,n%=256,r.push(n),r.push(t);return r}(t),e,n,r)}(this,e,t,n);break;default:throw new Error("Unknown encoding")}return i},o.prototype.toString=function(e,t,n){var r,o,i,s,u=this;if(e=String(e||"utf8").toLowerCase(),t=Number(t)||0,(n=void 0!==n?Number(n):u.length)===t)return"";switch(e){case"hex":r=function(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||rthis.length&&(r=this.length);var i=(r=e.length-t=this.length))return this[e]},o.prototype.readUInt16LE=function(e,t){return h(this,e,!0,t)},o.prototype.readUInt16BE=function(e,t){return h(this,e,!1,t)},o.prototype.readUInt32LE=function(e,t){return p(this,e,!0,t)},o.prototype.readUInt32BE=function(e,t){return p(this,e,!1,t)},o.prototype.readInt8=function(e,t){if(t||(Y(null!=e,"missing offset"),Y(e=this.length))return 128&this[e]?-1*(255-this[e]+1):this[e]},o.prototype.readInt16LE=function(e,t){return g(this,e,!0,t)},o.prototype.readInt16BE=function(e,t){return g(this,e,!1,t)},o.prototype.readInt32LE=function(e,t){return y(this,e,!0,t)},o.prototype.readInt32BE=function(e,t){return y(this,e,!1,t)},o.prototype.readFloatLE=function(e,t){return w(this,e,!0,t)},o.prototype.readFloatBE=function(e,t){return w(this,e,!1,t)},o.prototype.readDoubleLE=function(e,t){return b(this,e,!0,t)},o.prototype.readDoubleBE=function(e,t){return b(this,e,!1,t)},o.prototype.writeUInt8=function(e,t,n){n||(Y(null!=e,"missing value"),Y(null!=t,"missing offset"),Y(t=this.length||(this[t]=e)},o.prototype.writeUInt16LE=function(e,t,n){v(this,e,t,!0,n)},o.prototype.writeUInt16BE=function(e,t,n){v(this,e,t,!1,n)},o.prototype.writeUInt32LE=function(e,t,n){m(this,e,t,!0,n)},o.prototype.writeUInt32BE=function(e,t,n){m(this,e,t,!1,n)},o.prototype.writeInt8=function(e,t,n){n||(Y(null!=e,"missing value"),Y(null!=t,"missing offset"),Y(t=this.length||(0<=e?this.writeUInt8(e,t,n):this.writeUInt8(255+e+1,t,n))},o.prototype.writeInt16LE=function(e,t,n){_(this,e,t,!0,n)},o.prototype.writeInt16BE=function(e,t,n){_(this,e,t,!1,n)},o.prototype.writeInt32LE=function(e,t,n){E(this,e,t,!0,n)},o.prototype.writeInt32BE=function(e,t,n){E(this,e,t,!1,n)},o.prototype.writeFloatLE=function(e,t,n){I(this,e,t,!0,n)},o.prototype.writeFloatBE=function(e,t,n){I(this,e,t,!1,n)},o.prototype.writeDoubleLE=function(e,t,n){A(this,e,t,!0,n)},o.prototype.writeDoubleBE=function(e,t,n){A(this,e,t,!1,n)},o.prototype.fill=function(e,t,n){if(t=t||0,n=n||this.length,Y("number"==typeof(e="string"==typeof(e=e||0)?e.charCodeAt(0):e)&&!isNaN(e),"value is not a number"),Y(t<=n,"end < start"),n!==t&&0!==this.length){Y(0<=t&&t"},o.prototype.toArrayBuffer=function(){if("undefined"==typeof Uint8Array)throw new Error("Buffer.toArrayBuffer not supported in this browser");if(o._useTypedArrays)return new o(this).buffer;for(var e=new Uint8Array(this.length),t=0,n=e.length;t=t.length||o>=e.length);o++)t[o+n]=e[o];return o}function C(e){try{return decodeURIComponent(e)}catch(e){return String.fromCharCode(65533)}}function M(e,t){Y("number"==typeof e,"cannot write a non-number as a number"),Y(0<=e,"specified a negative value for writing an unsigned value"),Y(e<=t,"value is larger than maximum value for type"),Y(Math.floor(e)===e,"value has a fractional component")}function N(e,t,n){Y("number"==typeof e,"cannot write a non-number as a number"),Y(e<=t,"value larger than maximum allowed value"),Y(n<=e,"value smaller than minimum allowed value"),Y(Math.floor(e)===e,"value has a fractional component")}function F(e,t,n){Y("number"==typeof e,"cannot write a non-number as a number"),Y(e<=t,"value larger than maximum allowed value"),Y(n<=e,"value smaller than minimum allowed value")}function Y(e,t){if(!e)throw new Error(t||"Failed assertion")}o._augment=function(e){return e._isBuffer=!0,e._get=e.get,e._set=e.set,e.get=B.get,e.set=B.set,e.write=B.write,e.toString=B.toString,e.toLocaleString=B.toString,e.toJSON=B.toJSON,e.copy=B.copy,e.slice=B.slice,e.readUInt8=B.readUInt8,e.readUInt16LE=B.readUInt16LE,e.readUInt16BE=B.readUInt16BE,e.readUInt32LE=B.readUInt32LE,e.readUInt32BE=B.readUInt32BE,e.readInt8=B.readInt8,e.readInt16LE=B.readInt16LE,e.readInt16BE=B.readInt16BE,e.readInt32LE=B.readInt32LE,e.readInt32BE=B.readInt32BE,e.readFloatLE=B.readFloatLE,e.readFloatBE=B.readFloatBE,e.readDoubleLE=B.readDoubleLE,e.readDoubleBE=B.readDoubleBE,e.writeUInt8=B.writeUInt8,e.writeUInt16LE=B.writeUInt16LE,e.writeUInt16BE=B.writeUInt16BE,e.writeUInt32LE=B.writeUInt32LE,e.writeUInt32BE=B.writeUInt32BE,e.writeInt8=B.writeInt8,e.writeInt16LE=B.writeInt16LE,e.writeInt16BE=B.writeInt16BE,e.writeInt32LE=B.writeInt32LE,e.writeInt32BE=B.writeInt32BE,e.writeFloatLE=B.writeFloatLE,e.writeFloatBE=B.writeFloatBE,e.writeDoubleLE=B.writeDoubleLE,e.writeDoubleBE=B.writeDoubleBE,e.fill=B.fill,e.inspect=B.inspect,e.toArrayBuffer=B.toArrayBuffer,e}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){o=e("buffer").Buffer;var c=new o(4);c.fill(0),t.exports={hash:function(e,t,n,r){for(var i=t(function(e,t){e.length%4!=0&&(n=e.length+(4-e.length%4),e=o.concat([e,c],n));for(var n,r=[],i=t?e.readInt32BE:e.readInt32LE,s=0;sg?t=e(t):t.length>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,o=-1732584194,i=271733878,s=0;s>>32-o,n)}function p(e,t,n,r,o,i,s){return h(t&n|~t&r,e,t,o,i,s)}function g(e,t,n,r,o,i,s){return h(t&r|n&~r,e,t,o,i,s)}function y(e,t,n,r,o,i,s){return h(t^n^r,e,t,o,i,s)}function w(e,t,n,r,o,i,s){return h(n^(t|~r),e,t,o,i,s)}function b(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}t.exports=function(e){return c.hash(e,d,16)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(e,t,n){(function(e,n,r,o,i,s,u,a,f){t.exports=function(e){for(var t,n=new Array(e),r=0;r>>((3&r)<<3)&255;return n}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){var c=e("./helpers");function d(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var n,r,o,i=Array(80),s=1732584193,u=-271733879,a=-1732584194,f=271733878,l=-1009589776,c=0;c>16)+(t>>16)+(n>>16)<<16|65535&n}function p(e,t){return e<>>32-t}t.exports=function(e){return c.hash(e,d,20,!0)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){function c(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function d(e,t){var n,r=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),o=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),i=new Array(64);e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var s,u,a=0;a>>t|e<<32-t},g=function(e,t){return e>>>t};t.exports=function(e){return h.hash(e,d,32,!0)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(e,t,n){(function(e,t,r,o,i,s,u,a,f){n.read=function(e,t,n,r,o){var i,s,u=8*o-r-1,a=(1<>1,l=-7,c=n?o-1:0,d=n?-1:1;for(o=e[t+c],c+=d,i=o&(1<<-l)-1,o>>=-l,l+=u;0>=-l,l+=r;0>1,c=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:i-1,h=r?1:-1;for(i=t<0||0===t&&1/t<0?1:0,t=Math.abs(t),isNaN(t)||t===1/0?(u=isNaN(t)?1:0,s=f):(s=Math.floor(Math.log(t)/Math.LN2),t*(r=Math.pow(2,-s))<1&&(s--,r*=2),2<=(t+=1<=s+l?c/r:c*Math.pow(2,1-l))*r&&(s++,r/=2),f<=s+l?(u=0,s=f):1<=s+l?(u=(t*r-1)*Math.pow(2,o),s+=l):(u=t*Math.pow(2,l-1)*Math.pow(2,o),s=0));8<=o;e[n+d]=255&u,d+=h,u/=256,o-=8);for(s=s<{var t,n;const r=null==e||null===(t=e.filter((e=>null==e?void 0:e[0])))||void 0===t?void 0:t[0];return null!==(n=null==r?void 0:r[1])&&void 0!==n?n:null==r?void 0:r[0]};class a{constructor(){var t,n;e(this,"_set",((e,t,n)=>{if(!this.hasProduct(t.slug))return;if(!(null!=n&&n.consent||this.getProductConsent(t.slug)))return;if(!this.validate(t))return;const r=null!=n&&n.directSave?t:this.trkMetadata(t);this.events.set(e,r),null!=n&&n.refreshTimer&&this.refreshTimer(),null!=n&&n.sendNow?this.uploadEvents():null!=n&&n.ignoreLimit||this.sendIfLimitReached()})),e(this,"_add",((e,t)=>{const n=s()(e);return this._set(n.toString(),e,t),n.toString()})),e(this,"with",(e=>{const t={slug:e,...this.envInfo()};return{add:(e,n)=>this._add({...t,...e},n),set:(e,n,r)=>this._set(e,{...t,...n},r),base:this}})),e(this,"envInfo",(()=>({site:window.location.hostname}))),e(this,"uploadEvents",(async()=>{if(0!==this.events.size)try{const e=Array.from(this.events.values());this.events.clear();const t=await this.sendBulkTracking(e.map((e=>{let{slug:t,site:n,license:r,...o}=e;return{slug:t,site:n,license:r,data:o}})));t.ok||this.listeners.forEach((e=>e({success:!1,error:"Failed to send tracking events"})));const n=await t.json();this.listeners.forEach((e=>e({success:!0,response:n})))}catch(e){console.error(e)}})),e(this,"sendIfLimitReached",(()=>{if(this.events.size>=this.eventsLimit)return this.uploadEvents()})),e(this,"subscribe",(e=>(this.listeners.push(e),()=>{this.listeners=this.listeners.filter((t=>t!==e))}))),e(this,"hasConsent",(()=>this.consent)),e(this,"sendBulkTracking",(e=>fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}))),e(this,"trkMetadata",(e=>({env:u([[window.location.href.includes("customize.php"),"customizer"],[window.location.href.includes("site-editor.php"),"site-editor"],[window.location.href.includes("widgets.php"),"widgets"],[window.location.href.includes("admin.php"),"admin"],["post-editor"]]),license:this.getProductTackHash(e.slug),...null!=e?e:{}}))),e(this,"hasProduct",(e=>this.products.some((t=>{var n;return null==t||null===(n=t.slug)||void 0===n?void 0:n.includes(e)})))),e(this,"getProductTackHash",(e=>{var t;return null===(t=this.products.find((t=>{var n;return null==t||null===(n=t.slug)||void 0===n?void 0:n.includes(e)})))||void 0===t?void 0:t.trackHash})),e(this,"getProductConsent",(e=>{var t;return null===(t=this.products.find((t=>{var n;return null==t||null===(n=t.slug)||void 0===n?void 0:n.includes(e)})))||void 0===t?void 0:t.consent})),e(this,"start",(()=>{this.interval||(this.interval=window.setInterval((()=>{this.uploadEvents()}),this.autoSendIntervalTime))})),e(this,"stop",(()=>{this.interval&&(window.clearInterval(this.interval),this.interval=null)})),e(this,"refreshTimer",(()=>{this.stop(),this.start()})),e(this,"validate",(e=>"object"==typeof e?0!==Object.keys(e).length&&Object.values(e).every(this.validate):void 0!==e)),e(this,"clone",(()=>{const e=new a;return e.events=new Map(this.events),e.listeners=[...this.listeners],e.interval=this.interval,e.consent=this.consent,e.endpoint=this.endpoint,e})),this.events=new Map,this.eventsLimit=50,this.listeners=[],this.interval=null,this.consent=!1,this.endpoint=null===(t=tiTelemetry)||void 0===t?void 0:t.endpoint,this.products=null===(n=tiTelemetry)||void 0===n?void 0:n.products,this.autoSendIntervalTime=3e5}}window.tiTrk=new a,null===(t=window)||void 0===t||null===(r=t.wp)||void 0===r||null===(o=r.customize)||void 0===o||o.bind("save",(()=>{var e,t;null===(e=window)||void 0===e||null===(t=e.tiTrk)||void 0===t||t.uploadEvents()})),window.addEventListener("beforeunload",(async()=>{var e,t;null===(e=window)||void 0===e||null===(t=e.tiTrk)||void 0===t||t.uploadEvents()}))}()}();
\ No newline at end of file
diff --git a/vendor/codeinwp/themeisle-sdk/index.php b/vendor/codeinwp/themeisle-sdk/index.php
deleted file mode 100644
index bedf179..0000000
--- a/vendor/codeinwp/themeisle-sdk/index.php
+++ /dev/null
@@ -1,3 +0,0 @@
- 0 ) {
- $themeisle_sdk_max_version = $themeisle_sdk_version;
- $themeisle_sdk_max_path = $themeisle_sdk_path;
-}
-
-// load the latest sdk version from the active Themeisle products.
-if ( ! function_exists( 'themeisle_sdk_load_licenser_if_present' ) ) :
- /**
- * Always load the licenser, if present.
- *
- * @param array $to_load Previously files to load.
- */
- function themeisle_sdk_load_licenser_if_present( $to_load ) {
- global $themeisle_sdk_abs_licenser_path;
- $to_load[] = $themeisle_sdk_abs_licenser_path;
-
- return $to_load;
- }
-endif;
-
-// load the latest sdk version from the active Themeisle products.
-if ( ! function_exists( 'themeisle_sdk_load_latest' ) ) :
- /**
- * Always load the latest sdk version.
- */
- function themeisle_sdk_load_latest() {
- /**
- * Don't load the library if we are on < 5.4.
- */
- if ( version_compare( PHP_VERSION, '5.4.32', '<' ) ) {
- return;
- }
- global $themeisle_sdk_max_path;
- require_once $themeisle_sdk_max_path . '/start.php';
- }
-endif;
-add_action( 'init', 'themeisle_sdk_load_latest' );
-
-if ( ! function_exists( 'tsdk_utmify' ) ) {
- /**
- * Utmify a link.
- *
- * @param string $url URL to add utms.
- * @param string $area Area in page where this is used ( CTA, image, section name).
- * @param string $location Location, such as customizer, about page.
- *
- * @return string
- */
- function tsdk_utmify( $url, $area, $location = null ) {
- static $current_page = null;
- if ( $location === null && $current_page === null ) {
- global $pagenow;
- $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : $pagenow;
- $current_page = isset( $screen->id ) ? $screen->id : ( ( $screen === null ) ? 'non-admin' : $screen );
- $current_page = sanitize_key( str_replace( '.php', '', $current_page ) );
- }
- $location = $location === null ? $current_page : $location;
- $content = sanitize_key(
- trim(
- str_replace(
- [
- 'https://',
- 'themeisle.com',
- '/themes/',
- '/plugins/',
- '/upgrade',
- ],
- '',
- $url
- ),
- '/'
- )
- );
- $filter_key = sanitize_key( $content );
- $url_args = [
- 'utm_source' => 'wpadmin',
- 'utm_medium' => $location,
- 'utm_campaign' => $area,
- 'utm_content' => $content,
- ];
- $query_arguments = apply_filters( 'tsdk_utmify_' . $filter_key, $url_args, $url );
- $utmify_url = esc_url_raw(
- add_query_arg(
- $query_arguments,
- $url
- )
- );
- return apply_filters( 'tsdk_utmify_url_' . $filter_key, $utmify_url, $url );
- }
-
- add_filter( 'tsdk_utmify', 'tsdk_utmify', 10, 3 );
-}
-
-
-if ( ! function_exists( 'tsdk_lstatus' ) ) {
- /**
- * Check license status.
- *
- * @param string $file Product basefile.
- *
- * @return string Status.
- */
- function tsdk_lstatus( $file ) {
- return \ThemeisleSDK\Modules\Licenser::status( $file );
- }
-}
-if ( ! function_exists( 'tsdk_lis_valid' ) ) {
- /**
- * Check if license is valid.
- *
- * @param string $file Product basefile.
- *
- * @return bool Validness.
- */
- function tsdk_lis_valid( $file ) {
- return \ThemeisleSDK\Modules\Licenser::is_valid( $file );
- }
-}
-if ( ! function_exists( 'tsdk_lplan' ) ) {
- /**
- * Get license plan.
- *
- * @param string $file Product basefile.
- *
- * @return string Plan.
- */
- function tsdk_lplan( $file ) {
- return \ThemeisleSDK\Modules\Licenser::plan( $file );
- }
-}
-
-if ( ! function_exists( 'tsdk_lkey' ) ) {
- /**
- * Get license key.
- *
- * @param string $file Product basefile.
- *
- * @return string Key.
- */
- function tsdk_lkey( $file ) {
- return \ThemeisleSDK\Modules\Licenser::key( $file );
- }
-}
-if ( ! function_exists( 'tsdk_support_link' ) ) {
-
- /**
- * Get Themeisle Support URL.
- *
- * @param string $file Product basefile.
- *
- * @return false|string Return support URL or false if no license is active.
- */
- function tsdk_support_link( $file ) {
-
- if ( ! did_action( 'init' ) ) {
- _doing_it_wrong( __FUNCTION__, 'tsdk_support_link() should not be called before the init action.', '3.2.39' );
- }
- $params = [];
- if ( ! tsdk_lis_valid( $file ) ) {
- return false;
- }
- $product = \ThemeisleSDK\Product::get( $file );
- if ( ! $product->requires_license() ) {
- return false;
- }
- static $site_params = null;
- if ( $site_params === null ) {
- if ( is_user_logged_in() && function_exists( 'wp_get_current_user' ) ) {
- $current_user = wp_get_current_user();
- $site_params['semail'] = urlencode( $current_user->user_email );
- }
- $site_params['swb'] = urlencode( home_url() );
- global $wp_version;
- $site_params['snv'] = urlencode( sprintf( 'WP-%s-PHP-%s', $wp_version, ( PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION ) ) );
- }
- $params['slkey'] = tsdk_lkey( $file );
- $params['sprd'] = urlencode( $product->get_name() );
- $params['svrs'] = urlencode( $product->get_version() );
-
-
- return add_query_arg(
- array_merge( $site_params, $params ),
- 'https://store.themeisle.com/direct-support/'
- );
- }
-}
diff --git a/vendor/codeinwp/themeisle-sdk/postcss.config.js b/vendor/codeinwp/themeisle-sdk/postcss.config.js
deleted file mode 100644
index fc52856..0000000
--- a/vendor/codeinwp/themeisle-sdk/postcss.config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const wpPreset = require( '@wordpress/postcss-plugins-preset' );
-
-module.exports = {
- plugins: [
- ...wpPreset,
- require( 'postcss-custom-media' )(), // Custom media queries: https://www.npmjs.com/package/postcss-custom-media
- require( 'postcss-combine-media-query' )(), // Combine media queries: https://www.npmjs.com/package/postcss-combine-media-query
- require( 'postcss-sort-media-queries' )() // Sort media queries: https://www.npmjs.com/package/postcss-sort-media-queries
- ]
-};
diff --git a/vendor/codeinwp/themeisle-sdk/src/Common/Abstract_module.php b/vendor/codeinwp/themeisle-sdk/src/Common/Abstract_module.php
deleted file mode 100644
index bb172c1..0000000
--- a/vendor/codeinwp/themeisle-sdk/src/Common/Abstract_module.php
+++ /dev/null
@@ -1,221 +0,0 @@
- 'otter-blocks/otter-blocks.php',
- 'optimole-wp' => 'optimole-wp/optimole-wp.php',
- 'tweet-old-post' => 'tweet-old-post/tweet-old-post.php',
- 'feedzy-rss-feeds' => 'feedzy-rss-feeds/feedzy-rss-feed.php',
- 'woocommerce-product-addon' => 'woocommerce-product-addon/woocommerce-product-addon.php',
- 'visualizer' => 'visualizer/index.php',
- 'wp-landing-kit' => 'wp-landing-kit/wp-landing-kit.php',
- 'multiple-pages-generator-by-porthas' => 'multiple-pages-generator-by-porthas/porthas-multi-pages-generator.php',
- 'sparks-for-woocommerce' => 'sparks-for-woocommerce/sparks-for-woocommerce.php',
- 'templates-patterns-collection' => 'templates-patterns-collection/templates-patterns-collection.php',
- ];
-
- /**
- * Product which use the module.
- *
- * @var Product $product Product object.
- */
- protected $product = null;
-
- /**
- * Can load the module for the selected product.
- *
- * @param Product $product Product data.
- *
- * @return bool Should load module?
- */
- abstract public function can_load( $product );
-
- /**
- * Bootstrap the module.
- *
- * @param Product $product Product object.
- */
- abstract public function load( $product );
-
- /**
- * Check if the product is from partner.
- *
- * @param Product $product Product data.
- *
- * @return bool Is product from partner.
- */
- public function is_from_partner( $product ) {
- foreach ( Module_Factory::$domains as $partner_domain ) {
- if ( strpos( $product->get_store_url(), $partner_domain ) !== false ) {
- return true;
- }
- }
-
- return array_key_exists( $product->get_slug(), Module_Factory::$slugs );
- }
-
- /**
- * Wrapper for wp_remote_get on VIP environments.
- *
- * @param string $url Url to check.
- * @param array $args Option params.
- *
- * @return array|\WP_Error
- */
- public function safe_get( $url, $args = array() ) {
- return function_exists( 'vip_safe_wp_remote_get' )
- ? vip_safe_wp_remote_get( $url )
- : wp_remote_get( //phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_remote_get_wp_remote_get, Already used.
- $url,
- $args
- );
- }
-
- /**
- * Get the SDK base url.
- *
- * @return string
- */
- public function get_sdk_uri() {
- global $themeisle_sdk_max_path;
-
- /**
- * $themeisle_sdk_max_path can point to the theme when the theme version is higher.
- * hence we also need to check that the path does not point to the theme else this will break the URL.
- * References: https://github.com/Codeinwp/neve-pro-addon/issues/2403
- */
- if ( $this->product->is_plugin() && false === strpos( $themeisle_sdk_max_path, get_template_directory() ) ) {
- return plugins_url( '/', $themeisle_sdk_max_path . '/themeisle-sdk/' );
- };
-
- return get_template_directory_uri() . '/vendor/codeinwp/themeisle-sdk/';
- }
-
- /**
- * Call plugin api
- *
- * @param string $slug plugin slug.
- *
- * @return array|mixed|object
- */
- public function call_plugin_api( $slug ) {
- include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
-
- $call_api = get_transient( 'ti_plugin_info_' . $slug );
-
- if ( false === $call_api ) {
- $call_api = plugins_api(
- 'plugin_information',
- array(
- 'slug' => $slug,
- 'fields' => array(
- 'downloaded' => false,
- 'rating' => false,
- 'description' => false,
- 'short_description' => true,
- 'donate_link' => false,
- 'tags' => false,
- 'sections' => true,
- 'homepage' => true,
- 'added' => false,
- 'last_updated' => false,
- 'compatibility' => false,
- 'tested' => false,
- 'requires' => false,
- 'downloadlink' => false,
- 'icons' => true,
- 'banners' => true,
- ),
- )
- );
- set_transient( 'ti_plugin_info_' . $slug, $call_api, 30 * MINUTE_IN_SECONDS );
- }
-
- return $call_api;
- }
-
- /**
- * Get the plugin status.
- *
- * @param string $plugin Plugin slug.
- *
- * @return bool
- */
- public function is_plugin_installed( $plugin ) {
- if ( ! isset( $this->plugin_paths[ $plugin ] ) ) {
- return false;
- }
-
- if ( file_exists( WP_CONTENT_DIR . '/plugins/' . $this->plugin_paths[ $plugin ] ) ) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Get plugin activation link.
- *
- * @param string $slug The plugin slug.
- *
- * @return string
- */
- public function get_plugin_activation_link( $slug ) {
- $reference_key = $slug === 'otter-blocks' ? 'reference_key' : 'optimole_reference_key';
- $plugin = isset( $this->plugin_paths[ $slug ] ) ? $this->plugin_paths[ $slug ] : $slug . '/' . $slug . '.php';
-
- return add_query_arg(
- array(
- 'plugin_status' => 'all',
- 'paged' => '1',
- 'action' => 'activate',
- $reference_key => $this->product->get_key(),
- 'plugin' => rawurlencode( $plugin ),
- '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $plugin ),
- ),
- admin_url( 'plugins.php' )
- );
- }
-
- /**
- * Checks if a plugin is active.
- *
- * @param string $plugin plugin slug.
- *
- * @return bool
- */
- public function is_plugin_active( $plugin ) {
- include_once ABSPATH . 'wp-admin/includes/plugin.php';
-
- $plugin = isset( $this->plugin_paths[ $plugin ] ) ? $this->plugin_paths[ $plugin ] : $plugin . '/' . $plugin . '.php';
-
- return is_plugin_active( $plugin );
- }
-}
diff --git a/vendor/codeinwp/themeisle-sdk/src/Common/Module_factory.php b/vendor/codeinwp/themeisle-sdk/src/Common/Module_factory.php
deleted file mode 100644
index 29313e9..0000000
--- a/vendor/codeinwp/themeisle-sdk/src/Common/Module_factory.php
+++ /dev/null
@@ -1,108 +0,0 @@
- true,
- 'neto' => true,
- 'olsen' => true,
- 'benson' => true,
- 'romero' => true,
- 'carmack' => true,
- 'puzzle' => true,
- 'broadsheet' => true,
- 'girlywp' => true,
- 'veggie' => true,
- 'zeko' => true,
- 'maishawp' => true,
- 'didi' => true,
- 'liber' => true,
- 'medicpress-pt' => true,
- 'adrenaline-pt' => true,
- 'consultpress-pt' => true,
- 'legalpress-pt' => true,
- 'gympress-pt' => true,
- 'readable-pt' => true,
- 'bolts-pt' => true,
- ];
- /**
- * Partners domains.
- *
- * @var array $DOMAINS Partners domains.
- */
- public static $domains = [
- 'proteusthemes.com',
- 'anarieldesign.com',
- 'prothemedesign.com',
- 'cssigniter.com',
- ];
- /**
- * Map which contains all the modules loaded for each product.
- *
- * @var array Mapping array.
- */
- private static $modules_attached = [];
-
- /**
- * Load availabe modules for the selected product.
- *
- * @param Product $product Loaded product.
- * @param array $modules List of modules.
- */
- public static function attach( $product, $modules ) {
-
- if ( ! isset( self::$modules_attached[ $product->get_slug() ] ) ) {
- self::$modules_attached[ $product->get_slug() ] = [];
- }
-
- foreach ( $modules as $module ) {
- $class = 'ThemeisleSDK\\Modules\\' . ucwords( $module, '_' );
- /**
- * Module object.
- *
- * @var Abstract_Module $module_object Module instance.
- */
- $module_object = new $class( $product );
-
- if ( ! $module_object->can_load( $product ) ) {
- continue;
- }
- self::$modules_attached[ $product->get_slug() ][ $module ] = $module_object->load( $product );
- }
- }
-
- /**
- * Products/Modules loaded map.
- *
- * @return array Modules map.
- */
- public static function get_modules_map() {
- return self::$modules_attached;
- }
-}
diff --git a/vendor/codeinwp/themeisle-sdk/src/Loader.php b/vendor/codeinwp/themeisle-sdk/src/Loader.php
deleted file mode 100644
index 2464690..0000000
--- a/vendor/codeinwp/themeisle-sdk/src/Loader.php
+++ /dev/null
@@ -1,151 +0,0 @@
- $module ) {
- if ( ! class_exists( 'ThemeisleSDK\\Modules\\' . ucwords( $module, '_' ) ) ) {
- unset( $modules[ $key ] );
- }
- }
- self::$available_modules = $modules;
- }
- }
-
- /**
- * Get cache token used in API requests.
- *
- * @return string Cache token.
- */
- public static function get_cache_token() {
- $cache_token = get_transient( 'themeisle_sdk_cache_token' );
- if ( false === $cache_token ) {
- $cache_token = wp_generate_password( 6, false );
- set_transient( $cache_token, WEEK_IN_SECONDS );
- }
-
- return $cache_token;
- }
-
- /**
- * Clear cache token.
- */
- public static function clear_cache_token() {
- delete_transient( 'themeisle_sdk_cache_token' );
- }
-
- /**
- * Register product into SDK.
- *
- * @param string $base_file The product base file.
- *
- * @return Loader The singleton object.
- */
- public static function add_product( $base_file ) {
-
- if ( ! is_file( $base_file ) ) {
- return self::$instance;
- }
- $product = new Product( $base_file );
-
- Module_Factory::attach( $product, self::get_modules() );
-
- self::$products[ $product->get_slug() ] = $product;
-
- return self::$instance;
- }
-
- /**
- * Get all registered modules by the SDK.
- *
- * @return array Modules available.
- */
- public static function get_modules() {
- return self::$available_modules;
- }
-
- /**
- * Get all products using the SDK.
- *
- * @return array Products available.
- */
- public static function get_products() {
- return self::$products;
- }
-
- /**
- * Get the version of the SDK.
- *
- * @return string The version.
- */
- public static function get_version() {
- return self::$version;
- }
-}
diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/About_us.php b/vendor/codeinwp/themeisle-sdk/src/Modules/About_us.php
deleted file mode 100644
index 291ac38..0000000
--- a/vendor/codeinwp/themeisle-sdk/src/Modules/About_us.php
+++ /dev/null
@@ -1,412 +0,0 @@
-_about_us_metadata', 'add_about_meta' );
- *
- * function add_about_meta($data) {
- * return [
- * 'location' => ,
- * 'logo' => ,
- * 'page_menu' => [['text' => '', 'url' => '']], // optional
- * 'has_upgrade_menu' => ,
- * 'upgrade_link' => ,
- * 'upgrade_text' => 'Get Pro Version',
- * ]
- * }
- *
- * @package ThemeIsleSDK
- * @subpackage Modules
- * @copyright Copyright (c) 2023, Andrei Baicus
- * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
- * @since 3.2.42
- */
-
-namespace ThemeisleSDK\Modules;
-
-use ThemeisleSDK\Common\Abstract_Module;
-use ThemeisleSDK\Product;
-
-// Exit if accessed directly.
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-/**
- * Promotions module for ThemeIsle SDK.
- */
-class About_Us extends Abstract_Module {
- /**
- * About data.
- *
- * @var array $about_data About page data, received from the filter.
- *
- * Shape of the $about_data property array:
- * [
- * 'location' => 'top level page',
- * 'logo' => 'logo path',
- * 'page_menu' => [['text' => '', 'url' => '']], // Optional
- * 'has_upgrade_menu' => !defined('NEVE_PRO_VERSION'),
- * 'upgrade_link' => 'upgrade url',
- * 'upgrade_text' => 'Get Pro Version',
- * ]
- */
- private $about_data = array();
-
- /**
- * Should we load this module.
- *
- * @param Product $product Product object.
- *
- * @return bool
- */
- public function can_load( $product ) {
- if ( $this->is_from_partner( $product ) ) {
- return false;
- }
-
- $this->about_data = apply_filters( $product->get_key() . '_about_us_metadata', array() );
-
- return ! empty( $this->about_data );
- }
-
- /**
- * Registers the hooks.
- *
- * @param Product $product Product to load.
- */
- public function load( $product ) {
- $this->product = $product;
-
- add_action( 'admin_menu', [ $this, 'add_submenu_pages' ] );
- add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_about_page_script' ] );
- }
-
- /**
- * Adds submenu pages.
- *
- * @return void
- */
- public function add_submenu_pages() {
- if ( ! isset( $this->about_data['location'] ) ) {
- return;
- }
-
- add_submenu_page(
- $this->about_data['location'],
- __( 'About Us', 'textdomain' ),
- __( 'About Us', 'textdomain' ),
- 'manage_options',
- $this->get_about_page_slug(),
- array( $this, 'render_about_us_page' ),
- 100
- );
-
- if ( ! isset( $this->about_data['has_upgrade_menu'] ) ) {
- return;
- }
-
- if ( $this->about_data['has_upgrade_menu'] !== true ) {
- return;
- }
-
- if ( ! isset( $this->about_data['upgrade_link'] ) ) {
- return;
- }
-
- if ( ! isset( $this->about_data['upgrade_text'] ) ) {
- return;
- }
-
- add_submenu_page(
- $this->about_data['location'],
- $this->about_data['upgrade_text'],
- $this->about_data['upgrade_text'],
- 'manage_options',
- $this->about_data['upgrade_link'],
- '',
- 101
- );
- }
-
- /**
- * Render page content.
- *
- * @return void
- */
- public function render_about_us_page() {
- echo '';
- }
-
- /**
- * Enqueue scripts & styles.
- *
- * @return void
- */
- public function enqueue_about_page_script() {
- $current_screen = get_current_screen();
-
- if ( ! isset( $current_screen->id ) ) {
- return;
- }
-
- if ( strpos( $current_screen->id, $this->get_about_page_slug() ) === false ) {
- return;
- }
- global $themeisle_sdk_max_path;
- $handle = 'ti-sdk-about-' . $this->product->get_key();
- $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/about/about.asset.php';
- $deps = array_merge( $asset_file['dependencies'], [ 'updates' ] );
-
- wp_register_script( $handle, $this->get_sdk_uri() . 'assets/js/build/about/about.js', $deps, $asset_file['version'], true );
- wp_localize_script( $handle, 'tiSDKAboutData', $this->get_about_localization_data() );
-
- wp_enqueue_script( $handle );
- wp_enqueue_style( $handle, $this->get_sdk_uri() . 'assets/js/build/about/about.css', [ 'wp-components' ], $asset_file['version'] );
- }
-
- /**
- * Get localized data.
- *
- * @return array
- */
- private function get_about_localization_data() {
- $links = isset( $this->about_data['page_menu'] ) ? $this->about_data['page_menu'] : [];
- $product_pages = isset( $this->about_data['product_pages'] ) ? $this->about_data['product_pages'] : [];
- return [
- 'links' => $links,
- 'logoUrl' => $this->about_data['logo'],
- 'productPages' => $this->get_product_pages_data( $product_pages ),
- 'products' => $this->get_other_products_data(),
- 'homeUrl' => esc_url( home_url() ),
- 'pageSlug' => $this->get_about_page_slug(),
- 'currentProduct' => [
- 'slug' => $this->product->get_key(),
- 'name' => $this->product->get_name(),
- ],
- 'teamImage' => $this->get_sdk_uri() . 'assets/images/team.jpg',
- 'strings' => [
- 'aboutUs' => __( 'About us', 'textdomain' ),
- 'heroHeader' => __( 'Our Story', 'textdomain' ),
- 'heroTextFirst' => __( 'Themeisle was founded in 2012 by a group of passionate developers who wanted to create beautiful and functional WordPress themes and plugins. Since then, we have grown into a team of over 20 dedicated professionals who are committed to delivering the best possible products to our customers.', 'textdomain' ),
- 'heroTextSecond' => __( 'At Themeisle, we offer a wide range of WordPress themes and plugins that are designed to meet the needs of both beginners and advanced users. Our products are feature-rich, easy to use, and are designed to help you create beautiful and functional websites.', 'textdomain' ),
- 'teamImageCaption' => __( 'Our team in WCEU2022 in Portugal', 'textdomain' ),
- 'newsHeading' => __( 'Stay connected for news & updates!', 'textdomain' ),
- 'emailPlaceholder' => __( 'Your email address', 'textdomain' ),
- 'signMeUp' => __( 'Sign me up', 'textdomain' ),
- 'installNow' => __( 'Install Now', 'textdomain' ),
- 'activate' => __( 'Activate', 'textdomain' ),
- 'learnMore' => __( 'Learn More', 'textdomain' ),
- 'installed' => __( 'Installed', 'textdomain' ),
- 'notInstalled' => __( 'Not Installed', 'textdomain' ),
- 'active' => __( 'Active', 'textdomain' ),
- ],
- 'canInstallPlugins' => current_user_can( 'install_plugins' ),
- 'canActivatePlugins' => current_user_can( 'activate_plugins' ),
- ];
- }
-
- /**
- * Get product pages data.
- *
- * @param array $product_pages Product pages.
- *
- * @return array
- */
- private function get_product_pages_data( $product_pages ) {
-
- $otter_slug = 'otter-blocks';
- $otter_plugin = [
- 'status' => 'not-installed',
- ];
- $otter_plugin['status'] = $this->is_plugin_installed( $otter_slug ) ? 'installed' : 'not-installed';
- $otter_plugin['status'] = $this->is_plugin_active( $otter_slug ) ? 'active' : $otter_plugin['status'];
- $otter_plugin['activationLink'] = $this->get_plugin_activation_link( $otter_slug );
-
- $pages = [
- 'otter-page' => [
- 'name' => 'Otter Blocks',
- 'hash' => '#otter-page',
- 'product' => $otter_slug,
- 'plugin' => $otter_plugin,
- 'strings' => [
- 'heading' => __( 'Build innovative layouts with Otter Blocks and Gutenberg', 'textdomain' ),
- 'text' => __( 'Otter is a lightweight, dynamic collection of page building blocks and templates for the WordPress block editor.', 'textdomain' ),
- 'buttons' => [
- 'install_otter_free' => __( "Install Otter - It's free!", 'textdomain' ),
- 'install_now' => __( 'Install Now', 'textdomain' ),
- 'learn_more' => __( 'Learn More', 'textdomain' ),
- 'learn_more_link' => tsdk_utmify( 'https://themeisle.com/plugins/otter-blocks/', 'otter-page', 'about-us' ),
- ],
- 'features' => [
- 'advancedTitle' => __( 'Advanced Features', 'textdomain' ),
- 'advancedDesc' => __( 'Add features such as Custom CSS, Animations & Visibility Conditions to all blocks.', 'textdomain' ),
- 'fastTitle' => __( 'Lightweight and Fast', 'textdomain' ),
- 'fastDesc' => __( 'Otter enhances WordPress site building experience without impacting site speed.', 'textdomain' ),
- 'mobileTitle' => __( 'Mobile-Friendly', 'textdomain' ),
- 'mobileDesc' => __( 'Each block can be tweaked to provide a consistent experience across all devices.', 'textdomain' ),
- ],
- 'details' => [
- 's1Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-builder.png',
- 's1Title' => __( 'A Better Page Building Experience', 'textdomain' ),
- 's1Text' => __( 'Otter can be used to build everything from a personal blog to an e-commerce site without losing the personal touch. Otter’s ease of use transforms basic blocks into expressive layouts in seconds.', 'textdomain' ),
- 's2Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-patterns.png',
- 's2Title' => __( 'A New Collection of Patterns', 'textdomain' ),
- 's2Text' => __( 'A New Patterns Library, containing a range of different elements in a variety of styles to help you build great pages. All of your website’s most important areas are covered: headers, testimonials, pricing tables, sections and more.', 'textdomain' ),
- 's3Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-library.png',
- 's3Title' => __( 'Advanced Blocks', 'textdomain' ),
- 's3Text' => __( 'Enhance your website’s design with powerful blocks, like the Add to Cart, Business Hours, Review Comparison, and dozens of WooCommerce blocks.', 'textdomain' ),
- ],
- 'testimonials' => [
- 'heading' => __( 'Trusted by more than 300K website owners', 'textdomain' ),
- 'users' => [
- [
- 'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2021/05/avatar-03.png',
- 'name' => 'Michael Burry',
- 'text' => 'Loved the collection of blocks. If you want to create nice Gutenberg Pages, this plugin will be very handy and useful.',
- ],
- [
- 'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2022/04/avatar-04.png',
- 'name' => 'Maria Gonzales',
- 'text' => 'I am very satisfied with Otter – a fantastic collection of blocks. And the plugin is perfectly integrated with Gutenberg and complete enough for my needs. ',
- ],
- [
- 'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2022/04/avatar-05.png',
- 'name' => 'Florian Henckel',
- 'text' => 'Otter Blocks work really well and I like the customization options. Easy to use and format to fit in with my site theme – and I’ve not encountered any compatibility or speed issues.',
- ],
- ],
- ],
- ],
- ],
- ];
-
- return array_filter(
- $pages,
- function ( $page_data, $page_key ) use ( $product_pages ) {
- return in_array( $page_key, $product_pages, true ) &&
- isset( $page_data['plugin']['status'] ) &&
- $page_data['plugin']['status'] === 'not-installed';
- },
- ARRAY_FILTER_USE_BOTH
- );
- }
-
- /**
- * Get products data.
- *
- * @return array
- */
- private function get_other_products_data() {
- $products = [
- 'optimole-wp' => [
- 'name' => 'Optimole',
- 'description' => 'Optimole is an image optimization service that automatically optimizes your images and serves them to your visitors via a global CDN, making your website lighter, faster and helping you reduce your bandwidth usage.',
- ],
- 'neve' => [
- 'skip_api' => true,
- 'name' => 'Neve',
- 'description' => __( 'A fast, lightweight, customizable WordPress theme offering responsive design, speed, and flexibility for various website types.', 'textdomain' ),
- 'icon' => $this->get_sdk_uri() . 'assets/images/neve.png',
- ],
- 'otter-blocks' => [
- 'name' => 'Otter',
- ],
- 'tweet-old-post' => [
- 'name' => 'Revive Old Post',
- ],
- 'feedzy-rss-feeds' => [
- 'name' => 'Feedzy',
- ],
- 'woocommerce-product-addon' => [
- 'name' => 'PPOM',
- 'condition' => class_exists( 'WooCommerce', false ),
- ],
- 'visualizer' => [
- 'name' => 'Visualizer',
- ],
- 'wp-landing-kit' => [
- 'skip_api' => true,
- 'premiumUrl' => tsdk_utmify( 'https://themeisle.com/plugins/wp-landing-kit', $this->get_about_page_slug() ),
- 'name' => 'WP Landing Kit',
- 'description' => __( 'Turn WordPress into a landing page powerhouse with Landing Kit, map domains to pages or any other published resource.', 'textdomain' ),
- 'icon' => $this->get_sdk_uri() . 'assets/images/wplk.png',
- ],
- 'multiple-pages-generator-by-porthas' => [
- 'name' => 'MPG',
- ],
- 'sparks-for-woocommerce' => [
- 'skip_api' => true,
- 'premiumUrl' => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce', $this->get_about_page_slug() ),
- 'name' => 'Sparks',
- 'description' => __( 'Extend your store functionality with 8 ultra-performant features like product comparisons, variation swatches, wishlist, and more.', 'textdomain' ),
- 'icon' => $this->get_sdk_uri() . 'assets/images/sparks.png',
- 'condition' => class_exists( 'WooCommerce', false ),
- ],
- 'templates-patterns-collection' => [
- 'name' => 'Templates Cloud',
- 'description' => __( 'Design, save, and revisit your templates anytime with your personal vault on Templates Cloud.', 'textdomain' ),
- ],
- ];
-
- foreach ( $products as $slug => $product ) {
- if ( isset( $product['condition'] ) && ! $product['condition'] ) {
- unset( $products[ $slug ] );
- continue;
- }
-
- if ( $slug === 'neve' ) {
- $theme = get_template();
- $themes = wp_get_themes();
-
- $products[ $slug ]['status'] = isset( $themes['neve'] ) ? 'installed' : 'not-installed';
- $products[ $slug ]['status'] = $theme === 'neve' ? 'active' : $products[ $slug ]['status'];
-
- $products[ $slug ]['activationLink'] = add_query_arg(
- [
- 'stylesheet' => 'neve',
- 'action' => 'activate',
- '_wpnonce' => wp_create_nonce( 'switch-theme_neve' ),
- ],
- admin_url( 'themes.php' )
- );
-
- continue;
- }
-
- $products[ $slug ]['status'] = $this->is_plugin_installed( $slug ) ? 'installed' : 'not-installed';
- $products[ $slug ]['status'] = $this->is_plugin_active( $slug ) ? 'active' : $products[ $slug ]['status'];
- $products[ $slug ]['activationLink'] = $this->get_plugin_activation_link( $slug );
-
-
- if ( isset( $product['skip_api'] ) ) {
- continue;
- }
-
- $api_data = $this->call_plugin_api( $slug );
-
- if ( ! isset( $product['icon'] ) ) {
- $products[ $slug ]['icon'] = isset( $api_data->icons['2x'] ) ? $api_data->icons['2x'] : $api_data->icons['1x'];
- }
- if ( ! isset( $product['description'] ) ) {
- $products[ $slug ]['description'] = $api_data->short_description;
- }
- if ( ! isset( $product['name'] ) ) {
- $products[ $slug ]['name'] = $api_data->name;
- }
- }
-
- return $products;
- }
-
- /**
- * Get the page slug.
- *
- * @return string
- */
- private function get_about_page_slug() {
- return 'ti-about-' . $this->product->get_key();
- }
-}
diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Announcements.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Announcements.php
deleted file mode 100644
index e75a9b9..0000000
--- a/vendor/codeinwp/themeisle-sdk/src/Modules/Announcements.php
+++ /dev/null
@@ -1,379 +0,0 @@
- array(
- 'start' => '2024-11-25 00:00:00',
- 'end' => '2024-12-03 23:59:59',
- 'rendered' => false,
- ),
- );
-
- /**
- * Holds the option prefix for the announcements.
- *
- * This is used to store the dismiss date for each announcement.
- *
- * @var string
- */
- public $option_prefix = 'themeisle_sdk_announcement_';
-
- /**
- * Holds the time for the current request.
- *
- * @var string
- */
- public $time = '';
-
- /**
- * Check if the module can be loaded.
- *
- * @param Product $product Product data.
- *
- * @return bool
- */
- public function can_load( $product ) {
- if ( $this->is_from_partner( $product ) ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Load the module for the selected product.
- *
- * @param Product $product Product data.
- *
- * @return void
- */
- public function load( $product ) {
- if ( ! current_user_can( 'install_plugins' ) ) {
- return;
- }
-
- $this->product = $product;
-
- add_action( 'admin_init', array( $this, 'load_announcements' ) );
- add_filter( 'themeisle_sdk_active_announcements', array( $this, 'get_active_announcements' ) );
- add_filter( 'themeisle_sdk_announcements', array( $this, 'get_announcements_for_plugins' ) );
- }
-
- /**
- * Load all valid announcements.
- *
- * @return void
- */
- public function load_announcements() {
- $active = $this->get_active_announcements();
-
- if ( empty( $active ) ) {
- return;
- }
-
- foreach ( $active as $announcement ) {
-
- $method = $announcement . '_notice_render';
-
- if ( method_exists( $this, $method ) ) {
- add_action( 'admin_notices', array( $this, $method ) );
- }
- }
-
- // Load the ajax handler.
- add_action( 'wp_ajax_themeisle_sdk_dismiss_announcement', array( $this, 'disable_notification_ajax' ) );
- }
-
- /**
- * Get all active announcements.
- *
- * @return array List of active announcements.
- */
- public function get_active_announcements() {
- $active = array();
-
- foreach ( self::$timeline as $announcement_slug => $dates ) {
- if ( $this->is_active( $dates ) && $this->can_show( $announcement_slug, $dates ) ) {
- $active[] = $announcement_slug;
- }
- }
-
- return $active;
- }
-
- /**
- * Get all announcements along with plugin specific data.
- *
- * @return array List of announcements.
- */
- public function get_announcements_for_plugins() {
-
- $announcements = array();
-
- foreach ( self::$timeline as $announcement => $dates ) {
- $announcements[ $announcement ] = $dates;
-
- if ( false !== strpos( $announcement, 'black_friday' ) ) {
- $announcements[ $announcement ]['active'] = $this->is_active( $dates );
-
- // Dashboard banners URLs.
- $announcements[ $announcement ]['feedzy_dashboard_url'] = tsdk_utmify( 'https://themeisle.com/plugins/feedzy-rss-feeds/blackfriday/', 'bfcm24', 'dashboard' );
- $announcements[ $announcement ]['neve_dashboard_url'] = tsdk_utmify( 'https://themeisle.com/themes/neve/blackfriday/', 'bfcm24', 'dashboard' );
- $announcements[ $announcement ]['otter_dashboard_url'] = tsdk_utmify( 'https://themeisle.com/plugins/otter-blocks/blackfriday/', 'bfcm24', 'dashboard' );
-
- // Customizer banners URLs.
- $announcements[ $announcement ]['hestia_customizer_url'] = tsdk_utmify( 'https://themeisle.com/black-friday/', 'bfcm24', 'hestiacustomizer' );
- $announcements[ $announcement ]['neve_customizer_url'] = tsdk_utmify( 'https://themeisle.com/black-friday/', 'bfcm24', 'nevecustomizer' );
-
- // Banners urgency text.
- $remaining_time = $this->get_remaining_time_for_event( $dates['end'] );
- $announcements[ $announcement ]['remaining_time'] = $remaining_time;
- $announcements[ $announcement ]['urgency_text'] = ! empty( $remaining_time ) ? 'Hurry up! Only ' . $remaining_time . ' left.' : '';
- }
- }
-
- return apply_filters( 'themeisle_sdk_announcements_data', $announcements );
- }
-
- /**
- * Get the announcement data.
- *
- * @param string $announcement The announcement to get the data for.
- *
- * @return array
- */
- public function get_announcement_data( $announcement ) {
- return ! empty( $announcement ) && is_string( $announcement ) && isset( self::$timeline[ $announcement ] ) ? self::$timeline[ $announcement ] : array();
- }
-
- /**
- * Check if the announcement has an active timeline.
- *
- * @param array $dates The announcement to check.
- *
- * @return bool
- */
- public function is_active( $dates ) {
-
- if ( empty( $this->time ) ) {
- $this->time = current_time( 'Y-m-d' );
- }
-
- $start = isset( $dates['start'] ) ? $dates['start'] : null;
- $end = isset( $dates['end'] ) ? $dates['end'] : null;
-
- if ( $start && $end ) {
- return $start <= $this->time && $this->time <= $end;
- } elseif ( $start ) {
- return $this->time >= $start;
- } elseif ( $end ) {
- return $this->time <= $end;
- }
-
- return false;
- }
-
- /**
- * Get the remaining time for the event in a human readable format.
- *
- * @param string $end_date The end date for event.
- * @return string Remaining time for the event.
- */
- public function get_remaining_time_for_event( $end_date ) {
- if ( empty( $end_date ) || ! is_string( $end_date ) ) {
- return '';
- }
-
- try {
- $end_date = new \DateTime( $end_date, new \DateTimeZone( 'GMT' ) );
- $current_date = new \DateTime( 'now', new \DateTimeZone( 'GMT' ) );
- $diff = $end_date->diff( $current_date );
-
- if ( $diff->days > 0 ) {
- return $diff->days === 1 ? $diff->format( '%a day' ) : $diff->format( '%a days' );
- }
-
- if ( $diff->h > 0 ) {
- return $diff->h === 1 ? $diff->format( '%h hour' ) : $diff->format( '%h hours' );
- }
-
- if ( $diff->i > 0 ) {
- return $diff->i === 1 ? $diff->format( '%i minute' ) : $diff->format( '%i minutes' );
- }
-
- return $diff->s === 1 ? $diff->format( '%s second' ) : $diff->format( '%s seconds' );
- } catch ( \Exception $e ) {
- if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
- error_log( $e->getMessage() ); // phpcs:ignore
- }
- }
-
- return '';
- }
-
- /**
- * Check if the announcement can be shown.
- *
- * @param string $announcement_slug The announcement to check.
- * @param array $dates The announcement to check.
- *
- * @return bool
- */
- public function can_show( $announcement_slug, $dates ) {
- $dismiss_date = get_option( $this->option_prefix . $announcement_slug, false );
-
- if ( false === $dismiss_date ) {
- return true;
- }
-
- // If the start date is after the dismiss date, show the notice.
- $start = isset( $dates['start'] ) ? $dates['start'] : null;
- if ( $start && $dismiss_date < $start ) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Disable the notification via ajax.
- *
- * @return void
- */
- public function disable_notification_ajax() {
- if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'dismiss_themeisle_event_notice' ) ) {
- wp_die( 'Invalid nonce! Refresh the page and try again.' );
- }
-
- if ( ! isset( $_POST['announcement'] ) || ! is_string( $_POST['announcement'] ) ) {
- wp_die( 'Invalid announcement! Refresh the page and try again.' );
- }
-
- $announcement = sanitize_key( $_POST['announcement'] );
-
- update_option( $this->option_prefix . $announcement, current_time( 'Y-m-d' ) );
- wp_die( 'success' );
- }
-
- /**
- * Render the Black Friday notice.
- *
- * @return void
- */
- public function black_friday_notice_render() {
-
- // Prevent the notice from being rendered twice.
- if ( self::$timeline['black_friday']['rendered'] ) {
- return;
- }
- self::$timeline['black_friday']['rendered'] = true;
-
- $product_names = array();
-
- foreach ( Loader::get_products() as $product ) {
- $slug = $product->get_slug();
-
- // Do not add if the contains the string 'pro'.
- if ( strpos( $slug, 'pro' ) !== false ) {
- continue;
- }
-
- $product_names[] = $product->get_name();
- }
-
- // Randomize the products and get only 4.
- shuffle( $product_names );
- $product_names = array_slice( $product_names, 0, 4 );
-
- ?>
-
-
-
-
- Themeisle Black Friday Sale is Live! - Enjoy Maximum Savings on .
- Learn more
-
-
Hey, it\'s great to see you have {product} active for a few days now. How is everything going? If you can spare a few moments to rate it on WordPress.org it would help us a lot (and boost my motivation). Cheers!
';
-
- return $info_disclosure_content;
- }
-
- /**
- * Randomizes the options array.
- *
- * @param array $options The options array.
- */
- public function randomize_options( $options ) {
- $new = array();
- $keys = array_keys( $options );
- shuffle( $keys );
-
- foreach ( $keys as $key ) {
- $new[ $key ] = $options[ $key ];
- }
-
- return $new;
- }
-
- /**
- * Called when the deactivate button is clicked.
- */
- public function post_deactivate() {
- check_ajax_referer( (string) __CLASS__, 'nonce' );
-
- $this->post_deactivate_or_cancel();
-
- if ( empty( $_POST['id'] ) ) {
-
- wp_send_json( [] );
-
- return;
- }
- $this->call_api(
- array(
- 'type' => 'deactivate',
- 'id' => sanitize_key( $_POST['id'] ),
- 'comment' => isset( $_POST['msg'] ) ? sanitize_textarea_field( $_POST['msg'] ) : '',
- )
- );
- wp_send_json( [] );
-
- }
-
- /**
- * Called when the deactivate/cancel button is clicked.
- */
- private function post_deactivate_or_cancel() {
- if ( ! isset( $_POST['type'] ) || ! isset( $_POST['key'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.
- return;
- }
- if ( 'theme' !== $_POST['type'] ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.
- return;
- }
-
- set_transient( 'ti_sdk_pause_' . sanitize_text_field( $_POST['key'] ), true, self::PAUSE_DEACTIVATE_WINDOW_DAYS * DAY_IN_SECONDS );//phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.
-
- }
-
- /**
- * Calls the API
- *
- * @param array $attributes The attributes of the post body.
- *
- * @return bool Is the request succesfull?
- */
- protected function call_api( $attributes ) {
- $slug = $this->product->get_slug();
- $version = $this->product->get_version();
- $attributes['slug'] = $slug;
- $attributes['version'] = $version;
- $attributes['url'] = get_site_url();
- $attributes['active_time'] = ( time() - $this->product->get_install_time() );
-
- $response = wp_remote_post(
- self::FEEDBACK_ENDPOINT,
- array(
- 'body' => $attributes,
- )
- );
-
- return is_wp_error( $response );
- }
-
- /**
- * Should we load this object?.
- *
- * @param Product $product Product object.
- *
- * @return bool Should we load the module?
- */
- public function can_load( $product ) {
- if ( $this->is_from_partner( $product ) ) {
- return false;
- }
- if ( $product->is_theme() && ( false !== get_transient( 'ti_sdk_pause_' . $product->get_key(), false ) ) ) {
- return false;
- }
-
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
- return true;
- }
- global $pagenow;
-
- if ( ! isset( $pagenow ) || empty( $pagenow ) ) {
- return false;
- }
-
- if ( $product->is_plugin() && 'plugins.php' !== $pagenow ) {
- return false;
-
- }
- if ( $product->is_theme() && 'theme-install.php' !== $pagenow ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Loads module hooks.
- *
- * @param Product $product Product details.
- *
- * @return Uninstall_Feedback Current module instance.
- */
- public function load( $product ) {
-
- if ( apply_filters( $product->get_key() . '_hide_uninstall_feedback', false ) ) {
- return;
- }
-
- $this->product = $product;
- add_action( 'admin_head', array( $this, 'load_resources' ) );
- add_action( 'wp_ajax_' . $this->product->get_key() . '_uninstall_feedback', array( $this, 'post_deactivate' ) );
-
- return $this;
- }
-}
diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Welcome.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Welcome.php
deleted file mode 100644
index 8650e60..0000000
--- a/vendor/codeinwp/themeisle-sdk/src/Modules/Welcome.php
+++ /dev/null
@@ -1,193 +0,0 @@
-_welcome_metadata', function() {
- * return [
- * 'is_enabled' => ,
- * 'pro_name' => 'Product PRO name',
- * 'logo' => '',
- * 'cta_link' => tsdk_utmify( 'https://link_to_upgrade.with/?discount=')
- * ];
- * } );
- * ```
- *
- * @package ThemeIsleSDK
- * @subpackage Modules
- * @copyright Copyright (c) 2023, Bogdan Preda
- * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
- * @since 1.0.0
- */
-
-namespace ThemeisleSDK\Modules;
-
-// Exit if accessed directly.
-use ThemeisleSDK\Common\Abstract_Module;
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-/**
- * Promotions module for ThemeIsle SDK.
- */
-class Welcome extends Abstract_Module {
-
- /**
- * Debug mode.
- *
- * @var bool
- */
- private $debug = false;
-
- /**
- * Welcome metadata.
- *
- * @var array
- */
- private $welcome_discounts = array();
-
- /**
- * Check that we can load this module.
- *
- * @param \ThemeisleSDK\Product $product The product.
- *
- * @return bool
- */
- public function can_load( $product ) {
- $this->debug = apply_filters( 'themeisle_sdk_welcome_debug', $this->debug );
- $welcome_metadata = apply_filters( $product->get_key() . '_welcome_metadata', array() );
-
- $is_welcome_enabled = $this->is_welcome_meta_valid( $welcome_metadata );
-
- if ( $is_welcome_enabled ) {
- $this->welcome_discounts[ $product->get_key() ] = $welcome_metadata;
- }
-
- return $this->debug || $is_welcome_enabled;
- }
-
- /**
- * Check that the metadata is valid and the welcome is enabled.
- *
- * @param array $welcome_metadata The metadata to validate.
- *
- * @return bool
- */
- private function is_welcome_meta_valid( $welcome_metadata ) {
- return ! empty( $welcome_metadata ) && isset( $welcome_metadata['is_enabled'] ) && $welcome_metadata['is_enabled'];
- }
-
- /**
- * Load the module.
- *
- * @param \ThemeisleSDK\Product $product The product.
- *
- * @return $this
- */
- public function load( $product ) {
- if ( ! current_user_can( 'install_plugins' ) ) {
- return;
- }
-
- $this->product = $product;
- if ( ! $this->is_time_to_show_welcome() && $this->debug === false ) {
- return;
- }
-
- add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ], 99, 1 );
-
- return $this;
- }
-
- /**
- * Check if it's time to show the welcome.
- *
- * @return bool
- */
- private function is_time_to_show_welcome() {
- // if 7 days from install have not passed, don't show the welcome.
- if ( $this->product->get_install_time() + 7 * DAY_IN_SECONDS > time() ) {
- return false;
- }
-
- // if 12 days from install have passed, don't show the welcome ( after 7 days for 5 days ).
- if ( $this->product->get_install_time() + 12 * DAY_IN_SECONDS < time() ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Add the welcome notification.
- * Will block all other notifications if a welcome notification is present.
- *
- * @return array
- */
- public function add_notification( $all_notifications ) {
- if ( empty( $this->welcome_discounts ) ) {
- return $all_notifications;
- }
-
- if ( ! isset( $this->welcome_discounts[ $this->product->get_key() ] ) ) {
- return $all_notifications;
- }
-
- // filter out the notifications that are not welcome upsells
- // if we arrived here we will have at least one welcome upsell
- $all_notifications = array_filter(
- $all_notifications,
- function( $notification ) {
- return strpos( $notification['id'], '_welcome_upsell_flag' ) !== false;
- }
- );
-
- $offer = $this->welcome_discounts[ $this->product->get_key() ];
-
- $response = [];
- $logo = isset( $offer['logo'] ) ? $offer['logo'] : '';
- $pro_name = isset( $offer['pro_name'] ) ? $offer['pro_name'] : $this->product->get_friendly_name() . ' PRO';
-
- $link = $offer['cta_link'];
-
- $message = apply_filters( $this->product->get_key() . '_welcome_upsell_message', '
You\'ve been using {product} for 7 days now and we appreciate your loyalty! We also want to make sure you\'re getting the most out of our product. That\'s why we\'re offering you a special deal - upgrade to {pro_product} in the next 5 days and receive a discount of up to 30%. Upgrade now and unlock all the amazing features of {pro_product}!
' );
-
- $button_submit = apply_filters( $this->product->get_key() . '_feedback_review_button_do', 'Upgrade Now!' );
- $button_cancel = apply_filters( $this->product->get_key() . '_feedback_review_button_cancel', 'No, thanks.' );
- $message = str_replace(
- [ '{product}', '{pro_product}', '{cta_link}' ],
- [
- $this->product->get_friendly_name(),
- $pro_name,
- $link,
- ],
- $message
- );
-
- $all_notifications[] = [
- 'id' => $this->product->get_key() . '_welcome_upsell_flag',
- 'message' => $message,
- 'img_src' => $logo,
- 'ctas' => [
- 'confirm' => [
- 'link' => $link,
- 'text' => $button_submit,
- ],
- 'cancel' => [
- 'link' => '#',
- 'text' => $button_cancel,
- ],
- ],
- 'type' => 'info',
- ];
-
- $key = array_rand( $all_notifications );
- $response[] = $all_notifications[ $key ];
-
- return $response;
- }
-
-}
diff --git a/vendor/codeinwp/themeisle-sdk/src/Product.php b/vendor/codeinwp/themeisle-sdk/src/Product.php
deleted file mode 100644
index 17f9d1f..0000000
--- a/vendor/codeinwp/themeisle-sdk/src/Product.php
+++ /dev/null
@@ -1,460 +0,0 @@
-basefile = $basefile;
- $this->setup_from_path();
- $this->setup_from_fileheaders();
- }
- }
- $install = get_option( $this->get_key() . '_install', 0 );
- if ( 0 === $install ) {
- $install = time();
- update_option( $this->get_key() . '_install', time() );
- }
- $this->install = $install;
- self::$cached_products[ crc32( $basefile ) ] = $this;
- }
-
- /**
- * Return a product.
- *
- * @param string $basefile Product basefile.
- *
- * @return Product Product Object.
- */
- public static function get( $basefile ) {
- $key = crc32( $basefile );
- if ( isset( self::$cached_products[ $key ] ) ) {
- return self::$cached_products[ $key ];
- }
- self::$cached_products[ $key ] = new Product( $basefile );
-
- return self::$cached_products[ $key ];
- }
-
- /**
- * Setup props from path.
- */
- public function setup_from_path() {
- $this->file = basename( $this->basefile );
- $dir = dirname( $this->basefile );
- $this->slug = basename( $dir );
- $exts = explode( '.', $this->basefile );
- $ext = $exts[ count( $exts ) - 1 ];
- if ( 'css' === $ext ) {
- $this->type = 'theme';
- }
- if ( 'php' === $ext ) {
- $this->type = 'plugin';
- }
- $this->key = self::key_ready_name( $this->slug );
- }
-
- /**
- * Normalize string.
- *
- * @param string $string the String to be normalized for cron handler.
- *
- * @return string $name The normalized string.
- */
- public static function key_ready_name( $string ) {
- return str_replace( '-', '_', strtolower( trim( $string ) ) );
- }
-
- /**
- * Setup props from fileheaders.
- */
- public function setup_from_fileheaders() {
- $file_headers = array(
- 'Requires License' => 'Requires License',
- 'WordPress Available' => 'WordPress Available',
- 'Pro Slug' => 'Pro Slug',
- 'Version' => 'Version',
- );
- if ( 'plugin' === $this->type ) {
- $file_headers['Name'] = 'Plugin Name';
- $file_headers['AuthorName'] = 'Author';
- $file_headers['AuthorURI'] = 'Author URI';
- }
- if ( 'theme' === $this->type ) {
- $file_headers['Name'] = 'Theme Name';
- $file_headers['AuthorName'] = 'Author';
- $file_headers['AuthorURI'] = 'Author URI';
- }
- $file_headers = get_file_data( $this->basefile, $file_headers );
-
- $this->name = $file_headers['Name'];
- $this->store_name = $file_headers['AuthorName'];
- $this->author_url = $file_headers['AuthorURI'];
- $this->store_url = $file_headers['AuthorURI'];
-
- $this->requires_license = ( 'yes' === $file_headers['Requires License'] ) ? true : false;
- $this->wordpress_available = ( 'yes' === $file_headers['WordPress Available'] ) ? true : false;
- $this->pro_slug = ! empty( $file_headers['Pro Slug'] ) ? $file_headers['Pro Slug'] : '';
- $this->version = $file_headers['Version'];
-
- }
-
- /**
- * Return the product key.
- *
- * @return string The product key.
- */
- public function get_key() {
- return $this->key;
- }
-
- /**
- * Check if the product is either theme or plugin.
- *
- * @return string Product type.
- */
- public function get_type() {
- return $this->type;
- }
-
- /**
- * Return if the product is used as a plugin.
- *
- * @return bool Is plugin?
- */
- public function is_plugin() {
- return self::PLUGIN_TYPE === $this->type;
- }
-
- /**
- * Return if the product is used as a theme.
- *
- * @return bool Is theme ?
- */
- public function is_theme() {
- return self::THEME_TYPE === $this->type;
- }
-
- /**
- * Returns the product slug.
- *
- * @return string The product slug.
- */
- public function get_slug() {
- return $this->slug;
- }
-
- /**
- * The magic var_dump info method.
- *
- * @return array Debug info.
- */
- public function __debugInfo() {
- return array(
- 'name' => $this->name,
- 'slug' => $this->slug,
- 'version' => $this->version,
- 'basefile' => $this->basefile,
- 'key' => $this->key,
- 'type' => $this->type,
- 'store_name' => $this->store_name,
- 'store_url' => $this->store_url,
- 'wordpress_available' => $this->wordpress_available,
- 'requires_license' => $this->requires_license,
- );
-
- }
-
- /**
- * Getter for product version.
- *
- * @return string The product version.
- */
- public function get_version() {
- return $this->version;
- }
-
- /**
- * Returns current product license, if available.
- *
- * @return string Return license key, if available.
- */
- public function get_license() {
-
- if ( ! $this->requires_license() && ! $this->is_wordpress_available() ) {
- return 'free';
- }
- $license_data = get_option( $this->get_key() . '_license_data', '' );
-
- if ( empty( $license_data ) ) {
- return get_option( $this->get_key() . '_license', '' );
- }
- if ( ! isset( $license_data->key ) ) {
- return get_option( $this->get_key() . '_license', '' );
- }
-
- return $license_data->key;
- }
-
- /**
- * Either the product requires license or not.
- *
- * @return bool Either requires license or not.
- */
- public function requires_license() {
- return $this->requires_license;
- }
-
- /**
- * If product is available on wordpress.org or not.
- *
- * @return bool Either is wp available or not.
- */
- public function is_wordpress_available() {
- return $this->wordpress_available;
- }
-
- /**
- * Return friendly name.
- *
- * @return string Friendly name.
- */
- public function get_friendly_name() {
- $name = apply_filters( $this->get_key() . '_friendly_name', trim( str_replace( 'Lite', '', $this->get_name() ) ) );
- $name = rtrim( $name, '- ()' );
-
- return $name;
- }
-
- /**
- * Return the product version cache key.
- *
- * @return string The product version cache key.
- */
- public function get_cache_key() {
- return $this->get_key() . '_' . preg_replace( '/[^0-9a-zA-Z ]/m', '', $this->get_version() ) . 'versions';
- }
-
- /**
- * Getter for product name.
- *
- * @return string The product name.
- */
- public function get_name() {
- return $this->name;
- }
-
- /**
- * Returns the Store name.
- *
- * @return string Store name.
- */
- public function get_store_name() {
- return $this->store_name;
- }
-
- /**
- * Returns the store url.
- *
- * @return string The store url.
- */
- public function get_store_url() {
-
- if ( strpos( $this->store_url, '/themeisle.com' ) !== false ) {
- return 'https://store.themeisle.com/';
- }
-
- return $this->store_url;
- }
-
- /**
- * Returns product basefile, which holds the metaheaders.
- *
- * @return string The product basefile.
- */
- public function get_basefile() {
- return $this->basefile;
- }
-
- /**
- * Get changelog url.
- *
- * @return string Changelog url.
- */
- public function get_changelog() {
- return add_query_arg(
- [
- 'name' => rawurlencode( $this->get_name() ),
- 'edd_action' => 'view_changelog',
- ],
- $this->get_store_url()
- );
- }
-
- /**
- * Returns product filename.
- *
- * @return string The product filename.
- */
- public function get_file() {
- return $this->file;
- }
-
- /**
- * Returns the pro slug, if available.
- *
- * @return string The pro slug.
- */
- public function get_pro_slug() {
- return $this->pro_slug;
- }
-
- /**
- * Return the install timestamp.
- *
- * @return int The install timestamp.
- */
- public function get_install_time() {
- return $this->install;
- }
-
- /**
- * Returns the URL of the product base file.
- *
- * @param string $path The path to the file.
- *
- * @return string The URL of the product base file.
- */
- public function get_base_url( $path = '/' ) {
- if ( $this->type ) {
- return plugins_url( $path, $this->basefile );
- }
- }
-
-}
diff --git a/vendor/codeinwp/themeisle-sdk/start.php b/vendor/codeinwp/themeisle-sdk/start.php
deleted file mode 100644
index 922e374..0000000
--- a/vendor/codeinwp/themeisle-sdk/start.php
+++ /dev/null
@@ -1,54 +0,0 @@
-
- * Jordi Boggiano
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer\Autoload;
-
-/**
- * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
- *
- * $loader = new \Composer\Autoload\ClassLoader();
- *
- * // register classes with namespaces
- * $loader->add('Symfony\Component', __DIR__.'/component');
- * $loader->add('Symfony', __DIR__.'/framework');
- *
- * // activate the autoloader
- * $loader->register();
- *
- * // to enable searching the include path (eg. for PEAR packages)
- * $loader->setUseIncludePath(true);
- *
- * In this example, if you try to use a class in the Symfony\Component
- * namespace or one of its children (Symfony\Component\Console for instance),
- * the autoloader will first look for the class under the component/
- * directory, and it will then fallback to the framework/ directory if not
- * found before giving up.
- *
- * This class is loosely based on the Symfony UniversalClassLoader.
- *
- * @author Fabien Potencier
- * @author Jordi Boggiano
- * @see https://www.php-fig.org/psr/psr-0/
- * @see https://www.php-fig.org/psr/psr-4/
- */
-class ClassLoader
-{
- /** @var \Closure(string):void */
- private static $includeFile;
-
- /** @var string|null */
- private $vendorDir;
-
- // PSR-4
- /**
- * @var array>
- */
- private $prefixLengthsPsr4 = array();
- /**
- * @var array>
- */
- private $prefixDirsPsr4 = array();
- /**
- * @var list
- */
- private $fallbackDirsPsr4 = array();
-
- // PSR-0
- /**
- * List of PSR-0 prefixes
- *
- * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
- *
- * @var array>>
- */
- private $prefixesPsr0 = array();
- /**
- * @var list
- */
- private $fallbackDirsPsr0 = array();
-
- /** @var bool */
- private $useIncludePath = false;
-
- /**
- * @var array
- */
- private $classMap = array();
-
- /** @var bool */
- private $classMapAuthoritative = false;
-
- /**
- * @var array
- */
- private $missingClasses = array();
-
- /** @var string|null */
- private $apcuPrefix;
-
- /**
- * @var array
- */
- private static $registeredLoaders = array();
-
- /**
- * @param string|null $vendorDir
- */
- public function __construct($vendorDir = null)
- {
- $this->vendorDir = $vendorDir;
- self::initializeIncludeClosure();
- }
-
- /**
- * @return array>
- */
- public function getPrefixes()
- {
- if (!empty($this->prefixesPsr0)) {
- return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
- }
-
- return array();
- }
-
- /**
- * @return array>
- */
- public function getPrefixesPsr4()
- {
- return $this->prefixDirsPsr4;
- }
-
- /**
- * @return list
- */
- public function getFallbackDirs()
- {
- return $this->fallbackDirsPsr0;
- }
-
- /**
- * @return list
- */
- public function getFallbackDirsPsr4()
- {
- return $this->fallbackDirsPsr4;
- }
-
- /**
- * @return array Array of classname => path
- */
- public function getClassMap()
- {
- return $this->classMap;
- }
-
- /**
- * @param array $classMap Class to filename map
- *
- * @return void
- */
- public function addClassMap(array $classMap)
- {
- if ($this->classMap) {
- $this->classMap = array_merge($this->classMap, $classMap);
- } else {
- $this->classMap = $classMap;
- }
- }
-
- /**
- * Registers a set of PSR-0 directories for a given prefix, either
- * appending or prepending to the ones previously set for this prefix.
- *
- * @param string $prefix The prefix
- * @param list|string $paths The PSR-0 root directories
- * @param bool $prepend Whether to prepend the directories
- *
- * @return void
- */
- public function add($prefix, $paths, $prepend = false)
- {
- $paths = (array) $paths;
- if (!$prefix) {
- if ($prepend) {
- $this->fallbackDirsPsr0 = array_merge(
- $paths,
- $this->fallbackDirsPsr0
- );
- } else {
- $this->fallbackDirsPsr0 = array_merge(
- $this->fallbackDirsPsr0,
- $paths
- );
- }
-
- return;
- }
-
- $first = $prefix[0];
- if (!isset($this->prefixesPsr0[$first][$prefix])) {
- $this->prefixesPsr0[$first][$prefix] = $paths;
-
- return;
- }
- if ($prepend) {
- $this->prefixesPsr0[$first][$prefix] = array_merge(
- $paths,
- $this->prefixesPsr0[$first][$prefix]
- );
- } else {
- $this->prefixesPsr0[$first][$prefix] = array_merge(
- $this->prefixesPsr0[$first][$prefix],
- $paths
- );
- }
- }
-
- /**
- * Registers a set of PSR-4 directories for a given namespace, either
- * appending or prepending to the ones previously set for this namespace.
- *
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param list|string $paths The PSR-4 base directories
- * @param bool $prepend Whether to prepend the directories
- *
- * @throws \InvalidArgumentException
- *
- * @return void
- */
- public function addPsr4($prefix, $paths, $prepend = false)
- {
- $paths = (array) $paths;
- if (!$prefix) {
- // Register directories for the root namespace.
- if ($prepend) {
- $this->fallbackDirsPsr4 = array_merge(
- $paths,
- $this->fallbackDirsPsr4
- );
- } else {
- $this->fallbackDirsPsr4 = array_merge(
- $this->fallbackDirsPsr4,
- $paths
- );
- }
- } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
- // Register directories for a new namespace.
- $length = strlen($prefix);
- if ('\\' !== $prefix[$length - 1]) {
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
- }
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
- $this->prefixDirsPsr4[$prefix] = $paths;
- } elseif ($prepend) {
- // Prepend directories for an already registered namespace.
- $this->prefixDirsPsr4[$prefix] = array_merge(
- $paths,
- $this->prefixDirsPsr4[$prefix]
- );
- } else {
- // Append directories for an already registered namespace.
- $this->prefixDirsPsr4[$prefix] = array_merge(
- $this->prefixDirsPsr4[$prefix],
- $paths
- );
- }
- }
-
- /**
- * Registers a set of PSR-0 directories for a given prefix,
- * replacing any others previously set for this prefix.
- *
- * @param string $prefix The prefix
- * @param list|string $paths The PSR-0 base directories
- *
- * @return void
- */
- public function set($prefix, $paths)
- {
- if (!$prefix) {
- $this->fallbackDirsPsr0 = (array) $paths;
- } else {
- $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
- }
- }
-
- /**
- * Registers a set of PSR-4 directories for a given namespace,
- * replacing any others previously set for this namespace.
- *
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param list|string $paths The PSR-4 base directories
- *
- * @throws \InvalidArgumentException
- *
- * @return void
- */
- public function setPsr4($prefix, $paths)
- {
- if (!$prefix) {
- $this->fallbackDirsPsr4 = (array) $paths;
- } else {
- $length = strlen($prefix);
- if ('\\' !== $prefix[$length - 1]) {
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
- }
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
- $this->prefixDirsPsr4[$prefix] = (array) $paths;
- }
- }
-
- /**
- * Turns on searching the include path for class files.
- *
- * @param bool $useIncludePath
- *
- * @return void
- */
- public function setUseIncludePath($useIncludePath)
- {
- $this->useIncludePath = $useIncludePath;
- }
-
- /**
- * Can be used to check if the autoloader uses the include path to check
- * for classes.
- *
- * @return bool
- */
- public function getUseIncludePath()
- {
- return $this->useIncludePath;
- }
-
- /**
- * Turns off searching the prefix and fallback directories for classes
- * that have not been registered with the class map.
- *
- * @param bool $classMapAuthoritative
- *
- * @return void
- */
- public function setClassMapAuthoritative($classMapAuthoritative)
- {
- $this->classMapAuthoritative = $classMapAuthoritative;
- }
-
- /**
- * Should class lookup fail if not found in the current class map?
- *
- * @return bool
- */
- public function isClassMapAuthoritative()
- {
- return $this->classMapAuthoritative;
- }
-
- /**
- * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
- *
- * @param string|null $apcuPrefix
- *
- * @return void
- */
- public function setApcuPrefix($apcuPrefix)
- {
- $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
- }
-
- /**
- * The APCu prefix in use, or null if APCu caching is not enabled.
- *
- * @return string|null
- */
- public function getApcuPrefix()
- {
- return $this->apcuPrefix;
- }
-
- /**
- * Registers this instance as an autoloader.
- *
- * @param bool $prepend Whether to prepend the autoloader or not
- *
- * @return void
- */
- public function register($prepend = false)
- {
- spl_autoload_register(array($this, 'loadClass'), true, $prepend);
-
- if (null === $this->vendorDir) {
- return;
- }
-
- if ($prepend) {
- self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
- } else {
- unset(self::$registeredLoaders[$this->vendorDir]);
- self::$registeredLoaders[$this->vendorDir] = $this;
- }
- }
-
- /**
- * Unregisters this instance as an autoloader.
- *
- * @return void
- */
- public function unregister()
- {
- spl_autoload_unregister(array($this, 'loadClass'));
-
- if (null !== $this->vendorDir) {
- unset(self::$registeredLoaders[$this->vendorDir]);
- }
- }
-
- /**
- * Loads the given class or interface.
- *
- * @param string $class The name of the class
- * @return true|null True if loaded, null otherwise
- */
- public function loadClass($class)
- {
- if ($file = $this->findFile($class)) {
- $includeFile = self::$includeFile;
- $includeFile($file);
-
- return true;
- }
-
- return null;
- }
-
- /**
- * Finds the path to the file where the class is defined.
- *
- * @param string $class The name of the class
- *
- * @return string|false The path if found, false otherwise
- */
- public function findFile($class)
- {
- // class map lookup
- if (isset($this->classMap[$class])) {
- return $this->classMap[$class];
- }
- if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
- return false;
- }
- if (null !== $this->apcuPrefix) {
- $file = apcu_fetch($this->apcuPrefix.$class, $hit);
- if ($hit) {
- return $file;
- }
- }
-
- $file = $this->findFileWithExtension($class, '.php');
-
- // Search for Hack files if we are running on HHVM
- if (false === $file && defined('HHVM_VERSION')) {
- $file = $this->findFileWithExtension($class, '.hh');
- }
-
- if (null !== $this->apcuPrefix) {
- apcu_add($this->apcuPrefix.$class, $file);
- }
-
- if (false === $file) {
- // Remember that this class does not exist.
- $this->missingClasses[$class] = true;
- }
-
- return $file;
- }
-
- /**
- * Returns the currently registered loaders keyed by their corresponding vendor directories.
- *
- * @return array
- */
- public static function getRegisteredLoaders()
- {
- return self::$registeredLoaders;
- }
-
- /**
- * @param string $class
- * @param string $ext
- * @return string|false
- */
- private function findFileWithExtension($class, $ext)
- {
- // PSR-4 lookup
- $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
-
- $first = $class[0];
- if (isset($this->prefixLengthsPsr4[$first])) {
- $subPath = $class;
- while (false !== $lastPos = strrpos($subPath, '\\')) {
- $subPath = substr($subPath, 0, $lastPos);
- $search = $subPath . '\\';
- if (isset($this->prefixDirsPsr4[$search])) {
- $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
- foreach ($this->prefixDirsPsr4[$search] as $dir) {
- if (file_exists($file = $dir . $pathEnd)) {
- return $file;
- }
- }
- }
- }
- }
-
- // PSR-4 fallback dirs
- foreach ($this->fallbackDirsPsr4 as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
- return $file;
- }
- }
-
- // PSR-0 lookup
- if (false !== $pos = strrpos($class, '\\')) {
- // namespaced class name
- $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
- . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
- } else {
- // PEAR-like class name
- $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
- }
-
- if (isset($this->prefixesPsr0[$first])) {
- foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
- if (0 === strpos($class, $prefix)) {
- foreach ($dirs as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
- return $file;
- }
- }
- }
- }
- }
-
- // PSR-0 fallback dirs
- foreach ($this->fallbackDirsPsr0 as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
- return $file;
- }
- }
-
- // PSR-0 include paths.
- if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
- return $file;
- }
-
- return false;
- }
-
- /**
- * @return void
- */
- private static function initializeIncludeClosure()
- {
- if (self::$includeFile !== null) {
- return;
- }
-
- /**
- * Scope isolated include.
- *
- * Prevents access to $this/self from included files.
- *
- * @param string $file
- * @return void
- */
- self::$includeFile = \Closure::bind(static function($file) {
- include $file;
- }, null, null);
- }
-}
diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php
deleted file mode 100644
index 51e734a..0000000
--- a/vendor/composer/InstalledVersions.php
+++ /dev/null
@@ -1,359 +0,0 @@
-
- * Jordi Boggiano
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer;
-
-use Composer\Autoload\ClassLoader;
-use Composer\Semver\VersionParser;
-
-/**
- * This class is copied in every Composer installed project and available to all
- *
- * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
- *
- * To require its presence, you can require `composer-runtime-api ^2.0`
- *
- * @final
- */
-class InstalledVersions
-{
- /**
- * @var mixed[]|null
- * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null
- */
- private static $installed;
-
- /**
- * @var bool|null
- */
- private static $canGetVendors;
-
- /**
- * @var array[]
- * @psalm-var array}>
- */
- private static $installedByVendor = array();
-
- /**
- * Returns a list of all package names which are present, either by being installed, replaced or provided
- *
- * @return string[]
- * @psalm-return list
- */
- public static function getInstalledPackages()
- {
- $packages = array();
- foreach (self::getInstalled() as $installed) {
- $packages[] = array_keys($installed['versions']);
- }
-
- if (1 === \count($packages)) {
- return $packages[0];
- }
-
- return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
- }
-
- /**
- * Returns a list of all package names with a specific type e.g. 'library'
- *
- * @param string $type
- * @return string[]
- * @psalm-return list
- */
- public static function getInstalledPackagesByType($type)
- {
- $packagesByType = array();
-
- foreach (self::getInstalled() as $installed) {
- foreach ($installed['versions'] as $name => $package) {
- if (isset($package['type']) && $package['type'] === $type) {
- $packagesByType[] = $name;
- }
- }
- }
-
- return $packagesByType;
- }
-
- /**
- * Checks whether the given package is installed
- *
- * This also returns true if the package name is provided or replaced by another package
- *
- * @param string $packageName
- * @param bool $includeDevRequirements
- * @return bool
- */
- public static function isInstalled($packageName, $includeDevRequirements = true)
- {
- foreach (self::getInstalled() as $installed) {
- if (isset($installed['versions'][$packageName])) {
- return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
- }
- }
-
- return false;
- }
-
- /**
- * Checks whether the given package satisfies a version constraint
- *
- * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
- *
- * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
- *
- * @param VersionParser $parser Install composer/semver to have access to this class and functionality
- * @param string $packageName
- * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
- * @return bool
- */
- public static function satisfies(VersionParser $parser, $packageName, $constraint)
- {
- $constraint = $parser->parseConstraints((string) $constraint);
- $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
-
- return $provided->matches($constraint);
- }
-
- /**
- * Returns a version constraint representing all the range(s) which are installed for a given package
- *
- * It is easier to use this via isInstalled() with the $constraint argument if you need to check
- * whether a given version of a package is installed, and not just whether it exists
- *
- * @param string $packageName
- * @return string Version constraint usable with composer/semver
- */
- public static function getVersionRanges($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- $ranges = array();
- if (isset($installed['versions'][$packageName]['pretty_version'])) {
- $ranges[] = $installed['versions'][$packageName]['pretty_version'];
- }
- if (array_key_exists('aliases', $installed['versions'][$packageName])) {
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
- }
- if (array_key_exists('replaced', $installed['versions'][$packageName])) {
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
- }
- if (array_key_exists('provided', $installed['versions'][$packageName])) {
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
- }
-
- return implode(' || ', $ranges);
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @param string $packageName
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
- */
- public static function getVersion($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- if (!isset($installed['versions'][$packageName]['version'])) {
- return null;
- }
-
- return $installed['versions'][$packageName]['version'];
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @param string $packageName
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
- */
- public static function getPrettyVersion($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- if (!isset($installed['versions'][$packageName]['pretty_version'])) {
- return null;
- }
-
- return $installed['versions'][$packageName]['pretty_version'];
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @param string $packageName
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
- */
- public static function getReference($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- if (!isset($installed['versions'][$packageName]['reference'])) {
- return null;
- }
-
- return $installed['versions'][$packageName]['reference'];
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @param string $packageName
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
- */
- public static function getInstallPath($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @return array
- * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
- */
- public static function getRootPackage()
- {
- $installed = self::getInstalled();
-
- return $installed[0]['root'];
- }
-
- /**
- * Returns the raw installed.php data for custom implementations
- *
- * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
- * @return array[]
- * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}
- */
- public static function getRawData()
- {
- @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
-
- if (null === self::$installed) {
- // only require the installed.php file if this file is loaded from its dumped location,
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
- if (substr(__DIR__, -8, 1) !== 'C') {
- self::$installed = include __DIR__ . '/installed.php';
- } else {
- self::$installed = array();
- }
- }
-
- return self::$installed;
- }
-
- /**
- * Returns the raw data of all installed.php which are currently loaded for custom implementations
- *
- * @return array[]
- * @psalm-return list}>
- */
- public static function getAllRawData()
- {
- return self::getInstalled();
- }
-
- /**
- * Lets you reload the static array from another file
- *
- * This is only useful for complex integrations in which a project needs to use
- * this class but then also needs to execute another project's autoloader in process,
- * and wants to ensure both projects have access to their version of installed.php.
- *
- * A typical case would be PHPUnit, where it would need to make sure it reads all
- * the data it needs from this class, then call reload() with
- * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
- * the project in which it runs can then also use this class safely, without
- * interference between PHPUnit's dependencies and the project's dependencies.
- *
- * @param array[] $data A vendor/composer/installed.php data set
- * @return void
- *
- * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data
- */
- public static function reload($data)
- {
- self::$installed = $data;
- self::$installedByVendor = array();
- }
-
- /**
- * @return array[]
- * @psalm-return list}>
- */
- private static function getInstalled()
- {
- if (null === self::$canGetVendors) {
- self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
- }
-
- $installed = array();
-
- if (self::$canGetVendors) {
- foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
- if (isset(self::$installedByVendor[$vendorDir])) {
- $installed[] = self::$installedByVendor[$vendorDir];
- } elseif (is_file($vendorDir.'/composer/installed.php')) {
- /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */
- $required = require $vendorDir.'/composer/installed.php';
- $installed[] = self::$installedByVendor[$vendorDir] = $required;
- if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
- self::$installed = $installed[count($installed) - 1];
- }
- }
- }
- }
-
- if (null === self::$installed) {
- // only require the installed.php file if this file is loaded from its dumped location,
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
- if (substr(__DIR__, -8, 1) !== 'C') {
- /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */
- $required = require __DIR__ . '/installed.php';
- self::$installed = $required;
- } else {
- self::$installed = array();
- }
- }
-
- if (self::$installed !== array()) {
- $installed[] = self::$installed;
- }
-
- return $installed;
- }
-}
diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE
deleted file mode 100644
index f27399a..0000000
--- a/vendor/composer/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-
-Copyright (c) Nils Adermann, Jordi Boggiano
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
deleted file mode 100644
index 097728c..0000000
--- a/vendor/composer/autoload_classmap.php
+++ /dev/null
@@ -1,12 +0,0 @@
- $vendorDir . '/composer/InstalledVersions.php',
- 'WP_Async_Request' => $vendorDir . '/deliciousbrains/wp-background-processing/classes/wp-async-request.php',
- 'WP_Background_Process' => $vendorDir . '/deliciousbrains/wp-background-processing/classes/wp-background-process.php',
-);
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
deleted file mode 100644
index 36c014e..0000000
--- a/vendor/composer/autoload_files.php
+++ /dev/null
@@ -1,10 +0,0 @@
- $vendorDir . '/codeinwp/themeisle-sdk/load.php',
-);
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
deleted file mode 100644
index 15a2ff3..0000000
--- a/vendor/composer/autoload_namespaces.php
+++ /dev/null
@@ -1,9 +0,0 @@
-register(true);
-
- $filesToLoad = \Composer\Autoload\ComposerStaticInit718cd62be4fc0d1c7deeabef60d4e8b7::$files;
- $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
- if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
- $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
-
- require $file;
- }
- }, null, null);
- foreach ($filesToLoad as $fileIdentifier => $file) {
- $requireFile($fileIdentifier, $file);
- }
-
- return $loader;
- }
-}
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
deleted file mode 100644
index e74e4ee..0000000
--- a/vendor/composer/autoload_static.php
+++ /dev/null
@@ -1,26 +0,0 @@
- __DIR__ . '/..' . '/codeinwp/themeisle-sdk/load.php',
- );
-
- public static $classMap = array (
- 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
- 'WP_Async_Request' => __DIR__ . '/..' . '/deliciousbrains/wp-background-processing/classes/wp-async-request.php',
- 'WP_Background_Process' => __DIR__ . '/..' . '/deliciousbrains/wp-background-processing/classes/wp-background-process.php',
- );
-
- public static function getInitializer(ClassLoader $loader)
- {
- return \Closure::bind(function () use ($loader) {
- $loader->classMap = ComposerStaticInit718cd62be4fc0d1c7deeabef60d4e8b7::$classMap;
-
- }, null, ClassLoader::class);
- }
-}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
deleted file mode 100644
index 44a4008..0000000
--- a/vendor/composer/installed.json
+++ /dev/null
@@ -1,95 +0,0 @@
-{
- "packages": [
- {
- "name": "codeinwp/themeisle-sdk",
- "version": "3.3.14",
- "version_normalized": "3.3.14.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Codeinwp/themeisle-sdk.git",
- "reference": "662952078c57b12e4d3af9bc98ef847ea3500206"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/662952078c57b12e4d3af9bc98ef847ea3500206",
- "reference": "662952078c57b12e4d3af9bc98ef847ea3500206",
- "shasum": ""
- },
- "require-dev": {
- "codeinwp/phpcs-ruleset": "dev-main"
- },
- "time": "2024-02-27T17:30:04+00:00",
- "type": "library",
- "installation-source": "dist",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "GPL-2.0+"
- ],
- "authors": [
- {
- "name": "ThemeIsle team",
- "email": "friends@themeisle.com",
- "homepage": "https://themeisle.com"
- }
- ],
- "description": "ThemeIsle SDK",
- "homepage": "https://github.com/Codeinwp/themeisle-sdk",
- "keywords": [
- "wordpress"
- ],
- "support": {
- "issues": "https://github.com/Codeinwp/themeisle-sdk/issues",
- "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.14"
- },
- "install-path": "../codeinwp/themeisle-sdk"
- },
- {
- "name": "deliciousbrains/wp-background-processing",
- "version": "1.0.2",
- "version_normalized": "1.0.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/deliciousbrains/wp-background-processing.git",
- "reference": "2cbee1abd1b49e1133cd8f611df4d4fc5a8b9800"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/deliciousbrains/wp-background-processing/zipball/2cbee1abd1b49e1133cd8f611df4d4fc5a8b9800",
- "reference": "2cbee1abd1b49e1133cd8f611df4d4fc5a8b9800",
- "shasum": ""
- },
- "require": {
- "php": ">=5.2"
- },
- "suggest": {
- "coenjacobs/mozart": "Easily wrap this library with your own prefix, to prevent collisions when multiple plugins use this library"
- },
- "time": "2020-07-31T07:00:11+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "classmap": [
- "classes/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "GPL-2.0-or-later"
- ],
- "authors": [
- {
- "name": "Delicious Brains",
- "email": "nom@deliciousbrains.com"
- }
- ],
- "description": "WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks.",
- "support": {
- "issues": "https://github.com/deliciousbrains/wp-background-processing/issues",
- "source": "https://github.com/deliciousbrains/wp-background-processing/tree/master"
- },
- "install-path": "../deliciousbrains/wp-background-processing"
- }
- ],
- "dev": false,
- "dev-package-names": []
-}
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
deleted file mode 100644
index f2ad383..0000000
--- a/vendor/composer/installed.php
+++ /dev/null
@@ -1,41 +0,0 @@
- array(
- 'name' => 'codeinwp/wp-cloudflare-super-page-cache',
- 'pretty_version' => 'v4.7.7',
- 'version' => '4.7.7.0',
- 'reference' => '6bd071a3922831eedcdceb0056a286228c8ffbdf',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../../',
- 'aliases' => array(),
- 'dev' => false,
- ),
- 'versions' => array(
- 'codeinwp/themeisle-sdk' => array(
- 'pretty_version' => '3.3.14',
- 'version' => '3.3.14.0',
- 'reference' => '662952078c57b12e4d3af9bc98ef847ea3500206',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../codeinwp/themeisle-sdk',
- 'aliases' => array(),
- 'dev_requirement' => false,
- ),
- 'codeinwp/wp-cloudflare-super-page-cache' => array(
- 'pretty_version' => 'v4.7.7',
- 'version' => '4.7.7.0',
- 'reference' => '6bd071a3922831eedcdceb0056a286228c8ffbdf',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../../',
- 'aliases' => array(),
- 'dev_requirement' => false,
- ),
- 'deliciousbrains/wp-background-processing' => array(
- 'pretty_version' => '1.0.2',
- 'version' => '1.0.2.0',
- 'reference' => '2cbee1abd1b49e1133cd8f611df4d4fc5a8b9800',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../deliciousbrains/wp-background-processing',
- 'aliases' => array(),
- 'dev_requirement' => false,
- ),
- ),
-);
diff --git a/vendor/deliciousbrains/wp-background-processing/classes/wp-async-request.php b/vendor/deliciousbrains/wp-background-processing/classes/wp-async-request.php
deleted file mode 100644
index 7a37dd6..0000000
--- a/vendor/deliciousbrains/wp-background-processing/classes/wp-async-request.php
+++ /dev/null
@@ -1,181 +0,0 @@
-identifier = $this->prefix . '_' . $this->action;
-
- add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );
- add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );
- }
-
- /**
- * Set data used during the request
- *
- * @param array $data Data.
- *
- * @return $this
- */
- public function data( $data ) {
- $this->data = $data;
-
- return $this;
- }
-
- /**
- * Dispatch the async request
- *
- * @return array|WP_Error
- */
- public function dispatch() {
- $url = add_query_arg( $this->get_query_args(), $this->get_query_url() );
- $args = $this->get_post_args();
-
- return wp_remote_post( esc_url_raw( $url ), $args );
- }
-
- /**
- * Get query args
- *
- * @return array
- */
- protected function get_query_args() {
- if ( property_exists( $this, 'query_args' ) ) {
- return $this->query_args;
- }
-
- $args = array(
- 'action' => $this->identifier,
- 'nonce' => wp_create_nonce( $this->identifier ),
- );
-
- /**
- * Filters the post arguments used during an async request.
- *
- * @param array $url
- */
- return apply_filters( $this->identifier . '_query_args', $args );
- }
-
- /**
- * Get query URL
- *
- * @return string
- */
- protected function get_query_url() {
- if ( property_exists( $this, 'query_url' ) ) {
- return $this->query_url;
- }
-
- $url = admin_url( 'admin-ajax.php' );
-
- /**
- * Filters the post arguments used during an async request.
- *
- * @param string $url
- */
- return apply_filters( $this->identifier . '_query_url', $url );
- }
-
- /**
- * Get post args
- *
- * @return array
- */
- protected function get_post_args() {
- if ( property_exists( $this, 'post_args' ) ) {
- return $this->post_args;
- }
-
- $args = array(
- 'timeout' => 0.01,
- 'blocking' => false,
- 'body' => $this->data,
- 'cookies' => $_COOKIE,
- 'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
- );
-
- /**
- * Filters the post arguments used during an async request.
- *
- * @param array $args
- */
- return apply_filters( $this->identifier . '_post_args', $args );
- }
-
- /**
- * Maybe handle
- *
- * Check for correct nonce and pass to handler.
- */
- public function maybe_handle() {
- // Don't lock up other requests while processing
- session_write_close();
-
- check_ajax_referer( $this->identifier, 'nonce' );
-
- $this->handle();
-
- wp_die();
- }
-
- /**
- * Handle
- *
- * Override this method to perform any actions required
- * during the async request.
- */
- abstract protected function handle();
-
-}
diff --git a/vendor/deliciousbrains/wp-background-processing/classes/wp-background-process.php b/vendor/deliciousbrains/wp-background-processing/classes/wp-background-process.php
deleted file mode 100644
index ce7904a..0000000
--- a/vendor/deliciousbrains/wp-background-processing/classes/wp-background-process.php
+++ /dev/null
@@ -1,505 +0,0 @@
-cron_hook_identifier = $this->identifier . '_cron';
- $this->cron_interval_identifier = $this->identifier . '_cron_interval';
-
- add_action( $this->cron_hook_identifier, array( $this, 'handle_cron_healthcheck' ) );
- add_filter( 'cron_schedules', array( $this, 'schedule_cron_healthcheck' ) );
- }
-
- /**
- * Dispatch
- *
- * @access public
- * @return void
- */
- public function dispatch() {
- // Schedule the cron healthcheck.
- $this->schedule_event();
-
- // Perform remote post.
- return parent::dispatch();
- }
-
- /**
- * Push to queue
- *
- * @param mixed $data Data.
- *
- * @return $this
- */
- public function push_to_queue( $data ) {
- $this->data[] = $data;
-
- return $this;
- }
-
- /**
- * Save queue
- *
- * @return $this
- */
- public function save() {
- $key = $this->generate_key();
-
- if ( ! empty( $this->data ) ) {
- update_site_option( $key, $this->data );
- }
-
- return $this;
- }
-
- /**
- * Update queue
- *
- * @param string $key Key.
- * @param array $data Data.
- *
- * @return $this
- */
- public function update( $key, $data ) {
- if ( ! empty( $data ) ) {
- update_site_option( $key, $data );
- }
-
- return $this;
- }
-
- /**
- * Delete queue
- *
- * @param string $key Key.
- *
- * @return $this
- */
- public function delete( $key ) {
- delete_site_option( $key );
-
- return $this;
- }
-
- /**
- * Generate key
- *
- * Generates a unique key based on microtime. Queue items are
- * given a unique key so that they can be merged upon save.
- *
- * @param int $length Length.
- *
- * @return string
- */
- protected function generate_key( $length = 64 ) {
- $unique = md5( microtime() . rand() );
- $prepend = $this->identifier . '_batch_';
-
- return substr( $prepend . $unique, 0, $length );
- }
-
- /**
- * Maybe process queue
- *
- * Checks whether data exists within the queue and that
- * the process is not already running.
- */
- public function maybe_handle() {
- // Don't lock up other requests while processing
- session_write_close();
-
- if ( $this->is_process_running() ) {
- // Background process already running.
- wp_die();
- }
-
- if ( $this->is_queue_empty() ) {
- // No data to process.
- wp_die();
- }
-
- check_ajax_referer( $this->identifier, 'nonce' );
-
- $this->handle();
-
- wp_die();
- }
-
- /**
- * Is queue empty
- *
- * @return bool
- */
- protected function is_queue_empty() {
- global $wpdb;
-
- $table = $wpdb->options;
- $column = 'option_name';
-
- if ( is_multisite() ) {
- $table = $wpdb->sitemeta;
- $column = 'meta_key';
- }
-
- $key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%';
-
- $count = $wpdb->get_var( $wpdb->prepare( "
- SELECT COUNT(*)
- FROM {$table}
- WHERE {$column} LIKE %s
- ", $key ) );
-
- return ( $count > 0 ) ? false : true;
- }
-
- /**
- * Is process running
- *
- * Check whether the current process is already running
- * in a background process.
- */
- protected function is_process_running() {
- if ( get_site_transient( $this->identifier . '_process_lock' ) ) {
- // Process already running.
- return true;
- }
-
- return false;
- }
-
- /**
- * Lock process
- *
- * Lock the process so that multiple instances can't run simultaneously.
- * Override if applicable, but the duration should be greater than that
- * defined in the time_exceeded() method.
- */
- protected function lock_process() {
- $this->start_time = time(); // Set start time of current process.
-
- $lock_duration = ( property_exists( $this, 'queue_lock_time' ) ) ? $this->queue_lock_time : 60; // 1 minute
- $lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration );
-
- set_site_transient( $this->identifier . '_process_lock', microtime(), $lock_duration );
- }
-
- /**
- * Unlock process
- *
- * Unlock the process so that other instances can spawn.
- *
- * @return $this
- */
- protected function unlock_process() {
- delete_site_transient( $this->identifier . '_process_lock' );
-
- return $this;
- }
-
- /**
- * Get batch
- *
- * @return stdClass Return the first batch from the queue
- */
- protected function get_batch() {
- global $wpdb;
-
- $table = $wpdb->options;
- $column = 'option_name';
- $key_column = 'option_id';
- $value_column = 'option_value';
-
- if ( is_multisite() ) {
- $table = $wpdb->sitemeta;
- $column = 'meta_key';
- $key_column = 'meta_id';
- $value_column = 'meta_value';
- }
-
- $key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%';
-
- $query = $wpdb->get_row( $wpdb->prepare( "
- SELECT *
- FROM {$table}
- WHERE {$column} LIKE %s
- ORDER BY {$key_column} ASC
- LIMIT 1
- ", $key ) );
-
- $batch = new stdClass();
- $batch->key = $query->$column;
- $batch->data = maybe_unserialize( $query->$value_column );
-
- return $batch;
- }
-
- /**
- * Handle
- *
- * Pass each queue item to the task handler, while remaining
- * within server memory and time limit constraints.
- */
- protected function handle() {
- $this->lock_process();
-
- do {
- $batch = $this->get_batch();
-
- foreach ( $batch->data as $key => $value ) {
- $task = $this->task( $value );
-
- if ( false !== $task ) {
- $batch->data[ $key ] = $task;
- } else {
- unset( $batch->data[ $key ] );
- }
-
- if ( $this->time_exceeded() || $this->memory_exceeded() ) {
- // Batch limits reached.
- break;
- }
- }
-
- // Update or delete current batch.
- if ( ! empty( $batch->data ) ) {
- $this->update( $batch->key, $batch->data );
- } else {
- $this->delete( $batch->key );
- }
- } while ( ! $this->time_exceeded() && ! $this->memory_exceeded() && ! $this->is_queue_empty() );
-
- $this->unlock_process();
-
- // Start next batch or complete process.
- if ( ! $this->is_queue_empty() ) {
- $this->dispatch();
- } else {
- $this->complete();
- }
-
- wp_die();
- }
-
- /**
- * Memory exceeded
- *
- * Ensures the batch process never exceeds 90%
- * of the maximum WordPress memory.
- *
- * @return bool
- */
- protected function memory_exceeded() {
- $memory_limit = $this->get_memory_limit() * 0.9; // 90% of max memory
- $current_memory = memory_get_usage( true );
- $return = false;
-
- if ( $current_memory >= $memory_limit ) {
- $return = true;
- }
-
- return apply_filters( $this->identifier . '_memory_exceeded', $return );
- }
-
- /**
- * Get memory limit
- *
- * @return int
- */
- protected function get_memory_limit() {
- if ( function_exists( 'ini_get' ) ) {
- $memory_limit = ini_get( 'memory_limit' );
- } else {
- // Sensible default.
- $memory_limit = '128M';
- }
-
- if ( ! $memory_limit || - 1 === intval( $memory_limit ) ) {
- // Unlimited, set to 32GB.
- $memory_limit = '32000M';
- }
-
- return wp_convert_hr_to_bytes( $memory_limit );
- }
-
- /**
- * Time exceeded.
- *
- * Ensures the batch never exceeds a sensible time limit.
- * A timeout limit of 30s is common on shared hosting.
- *
- * @return bool
- */
- protected function time_exceeded() {
- $finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); // 20 seconds
- $return = false;
-
- if ( time() >= $finish ) {
- $return = true;
- }
-
- return apply_filters( $this->identifier . '_time_exceeded', $return );
- }
-
- /**
- * Complete.
- *
- * Override if applicable, but ensure that the below actions are
- * performed, or, call parent::complete().
- */
- protected function complete() {
- // Unschedule the cron healthcheck.
- $this->clear_scheduled_event();
- }
-
- /**
- * Schedule cron healthcheck
- *
- * @access public
- *
- * @param mixed $schedules Schedules.
- *
- * @return mixed
- */
- public function schedule_cron_healthcheck( $schedules ) {
- $interval = apply_filters( $this->identifier . '_cron_interval', 5 );
-
- if ( property_exists( $this, 'cron_interval' ) ) {
- $interval = apply_filters( $this->identifier . '_cron_interval', $this->cron_interval );
- }
-
- // Adds every 5 minutes to the existing schedules.
- $schedules[ $this->identifier . '_cron_interval' ] = array(
- 'interval' => MINUTE_IN_SECONDS * $interval,
- 'display' => sprintf( __( 'Every %d Minutes' ), $interval ),
- );
-
- return $schedules;
- }
-
- /**
- * Handle cron healthcheck
- *
- * Restart the background process if not already running
- * and data exists in the queue.
- */
- public function handle_cron_healthcheck() {
- if ( $this->is_process_running() ) {
- // Background process already running.
- exit;
- }
-
- if ( $this->is_queue_empty() ) {
- // No data to process.
- $this->clear_scheduled_event();
- exit;
- }
-
- $this->handle();
-
- exit;
- }
-
- /**
- * Schedule event
- */
- protected function schedule_event() {
- if ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) {
- wp_schedule_event( time(), $this->cron_interval_identifier, $this->cron_hook_identifier );
- }
- }
-
- /**
- * Clear scheduled event
- */
- protected function clear_scheduled_event() {
- $timestamp = wp_next_scheduled( $this->cron_hook_identifier );
-
- if ( $timestamp ) {
- wp_unschedule_event( $timestamp, $this->cron_hook_identifier );
- }
- }
-
- /**
- * Cancel Process
- *
- * Stop processing queue items, clear cronjob and delete batch.
- *
- */
- public function cancel_process() {
- if ( ! $this->is_queue_empty() ) {
- $batch = $this->get_batch();
-
- $this->delete( $batch->key );
-
- wp_clear_scheduled_hook( $this->cron_hook_identifier );
- }
-
- }
-
- /**
- * Task
- *
- * Override this method to perform any actions required on each
- * queue item. Return the modified item for further processing
- * in the next pass through. Or, return false to remove the
- * item from the queue.
- *
- * @param mixed $item Queue item to iterate over.
- *
- * @return mixed
- */
- abstract protected function task( $item );
-
-}
\ No newline at end of file
diff --git a/vendor/deliciousbrains/wp-background-processing/license.txt b/vendor/deliciousbrains/wp-background-processing/license.txt
deleted file mode 100644
index a0939e9..0000000
--- a/vendor/deliciousbrains/wp-background-processing/license.txt
+++ /dev/null
@@ -1,280 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/vendor/deliciousbrains/wp-background-processing/wp-background-processing.php b/vendor/deliciousbrains/wp-background-processing/wp-background-processing.php
deleted file mode 100644
index c2fc252..0000000
--- a/vendor/deliciousbrains/wp-background-processing/wp-background-processing.php
+++ /dev/null
@@ -1,24 +0,0 @@
-