parallel ip - initial checkin
Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/.project b/.project
new file mode 100644
index 0000000..fb7f963
--- /dev/null
+++ b/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaadin.addons.aggregator</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/about.html b/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 1, 2016</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/epl-v10.html b/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
new file mode 100644
index 0000000..466c9ba
--- /dev/null
+++ b/jenkins.build.config.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation
+-->
+<!--#======================================================================= -->
+<!--# Module specific parameters for the Jenkins Job -->
+<!--#======================================================================= -->
+
+<jenkins>
+ <jenkins.build.technologystack />
+ <settings>${user.home}/.m2/settingsMirrors.xml</settings>
+ <!-- DO NOT EDIT BELOW THIS LINE -->
+ <jenkins.build.dependencies>
+ <jenkins.build.dependency>org.eclipse.osbp.releng.maven</jenkins.build.dependency>
+ </jenkins.build.dependencies>
+</jenkins>
diff --git a/license.html b/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse Foundation
+source code
+ repository ("Repository") in software modules ("Modules") and made
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+Fragments and associated material. Each Feature may be packaged as a
+sub-directory in a directory named "features". Within a Feature, files
+named "feature.xml" may contain a list of the names and version numbers
+of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+Features"). Within a Feature, files named "feature.xml" may contain a
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+ SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software,
+examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of
+allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning
+Technology
+ in accordance with the Specification. By using Provisioning
+Technology in such a manner and making it available in accordance with
+the
+ Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in
+which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing,
+extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable
+Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+Software Agreement must inform the user of the terms and conditions that
+ govern
+ the Installable Software and must solicit acceptance by the end
+user in the manner prescribed in such Installable Software Agreement.
+Upon such
+ indication of agreement by the user, the provisioning Technology
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use,
+and/or re-export to
+ another country, of encryption software. BEFORE using any encryption
+software, please check the country's laws, regulations and policies
+concerning the import,
+ possession, or use, and re-export of encryption software, to see if
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/.project b/org.eclipse.osbp.vaadin.addons.absolutelayout/.project
new file mode 100644
index 0000000..f33826b
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/.project
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaadin.addons.absolutelayout</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.vaadin.integration.eclipse.widgetsetBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>com.vaadin.integration.eclipse.widgetsetNature</nature>
+ <nature>org.apache.ivyde.eclipse.ivynature</nature>
+ <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/LICENSE.txt b/org.eclipse.osbp.vaadin.addons.absolutelayout/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c01b4d9
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bnd-LastModified: 1491902092179
+Build-Jdk: 1.8.0_91
+Built-By: mollik
+Bundle-ActivationPolicy: lazy
+Bundle-Description: A parent POM aimed to set up the build of general Ma
+ ven based projects.
+Bundle-DocURL: http://www.eclipse.org/osbp
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaadin.addons.absolutelayout
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-SymbolicName: org.eclipse.osbp.vaadin.addons.absolutelayout
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Created-By: Apache Maven Bundle Plugin
+Export-Package: org.eclipse.osbp.vaadin.addons.absolutelayout;version="0
+ .9.0",org.eclipse.osbp.vaadin.addons.absolutelayout.client;version="0.9
+ .0",org.eclipse.osbp.vaadin.addons.absolutelayout.public.oabsolutelayou
+ t;version="0.9.0"
+Import-Package: com.vaadin.annotations;version="[7.5.7,7.7.0)",com.vaadi
+ n.client.communication;version="[7.5.7,7.7.0)",com.vaadin.client.ui.dd;
+ version="[7.5.7,7.7.0)",com.vaadin.server;version="[7.5.7,7.7.0)",com.v
+ aadin.ui;version="[7.5.7,7.7.0)",javax.servlet.annotation;resolution:=o
+ ptional;version="[3.0,4)",org.eclipse.osbp.vaadin.addons.absolutelayout
+ .client;version="[0.9,1)",org.junit
+Require-Bundle: com.vaadin.server;bundle-version="[7.5.7,7.7.0)",com.vaa
+ din.client;bundle-version="[7.5.7,7.7.0)",com.vaadin.shared;bundle-vers
+ ion="[7.5.7,7.7.0)",org.jsoup;bundle-version="[1.8.3,1.8.4)",dragdropla
+ youts.osgi;bundle-version="[1.1.3,1.1.4)"
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
+Tool: Bnd-3.2.0.201605172007
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/git.properties b/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/git.properties
new file mode 100644
index 0000000..5eccd6e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/git.properties
@@ -0,0 +1,14 @@
+#Generated by Git-Commit-Id-Plugin
+#Tue Apr 11 11:17:32 CEST 2017
+git.remote.origin.url=ssh\://compex@10.1.13.14/osbpgit/org.eclipse.osbp.vaadin.addons.git
+git.closest.tag.name=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
+git.commit.id.describe-short=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.time=02.02.2017 @ 18\:04\:55 MEZ
+git.commit.message.full=remove the feature from build
+git.commit.message.short=remove the feature from build
+git.commit.id.abbrev=90dd482
+git.branch=OSBP-initial-commit-2-Eclipse-4-luna
+git.closest.tag.commit.count=0
+git.commit.id.describe=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.id=90dd482e5bc78cd1a404d12445cebc868ee417b0
+git.tags=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.absolutelayout.launch b/org.eclipse.osbp.vaadin.addons.absolutelayout/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.absolutelayout.launch
new file mode 100644
index 0000000..040f8f6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.absolutelayout.launch
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.osbp.vaadin.addons.absolutelayout"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="org.eclipse.osbp.vaadin.addons.absolutelayout"/> </runtimeClasspathEntry> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.vaadin.addons.absolutelayout/src" path="3" type="2"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.vaadin.addons.absolutelayout/sample" path="3" type="2"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.vaadin.addons.absolutelayout/test" path="3" type="2"/> "/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.codeserver.CodeServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="org.eclipse.osbp.vaadin.addons.absolutelayout.AbsoluteLayoutWidgetset"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osbp.vaadin.addons.absolutelayout"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xss8M -Xmx512M -XX:MaxPermSize=512M"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="/Users/florianpirchner/Work/dev/osbp_client/git/org.eclipse.osbp.vaadin.addons/org.eclipse.osbp.vaadin.addons.absolutelayout"/>
+</launchConfiguration>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/epl-v10.html b/org.eclipse.osbp.vaadin.addons.absolutelayout/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/ivy.xml b/org.eclipse.osbp.vaadin.addons.absolutelayout/ivy.xml
new file mode 100644
index 0000000..b9bf25a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/ivy.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<!DOCTYPE ivy-module [
+ <!ENTITY vaadin.version "7.5.7">
+]>
+<ivy-module version="2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+ <info organisation="com.example" module="v7proj" />
+ <configurations>
+ <!-- The default configuration, which should be deployed to the server -->
+ <conf name="default" />
+ <!-- A configuration only needed when compiling the widget set. Should
+ not be deployed to the server -->
+ <conf name="widgetset-compile" />
+ <!-- A configuration used in compilation of server side classes only.
+ Should be deployed to the server -->
+ <conf name="nodeploy" />
+ </configurations>
+ <dependencies defaultconf="default" defaultconfmapping="default->default">
+ <!-- The core server part of Vaadin -->
+ <dependency org="com.vaadin" name="vaadin-server" rev="&vaadin.version;" />
+
+ <!-- Vaadin themes -->
+ <dependency org="com.vaadin" name="vaadin-themes" rev="&vaadin.version;" />
+
+ <!-- Push support -->
+ <dependency org="com.vaadin" name="vaadin-push" rev="&vaadin.version;" />
+
+ <!-- Servlet 3.0 API -->
+ <dependency org="javax.servlet" name="javax.servlet-api" rev="3.0.1" conf="nodeploy->default" />
+
+ <!-- TestBench 4 -->
+ <dependency org="com.vaadin" name="vaadin-testbench-api" rev="latest.release" conf="nodeploy -> default" />
+
+ <!-- Precompiled DefaultWidgetSet -->
+ <dependency org="com.vaadin" name="vaadin-client-compiled"
+ rev="&vaadin.version;" />
+
+ <!-- Vaadin client side, needed for widget set compilation -->
+ <dependency org="com.vaadin" name="vaadin-client" rev="&vaadin.version;"
+ conf="widgetset-compile->default" />
+
+ <!-- Compiler for custom widget sets. Should not be deployed -->
+ <dependency org="com.vaadin" name="vaadin-client-compiler"
+ rev="&vaadin.version;" conf="widgetset-compile->default" />
+
+ <dependency org="org.vaadin.addons" name="dragdroplayouts" rev="1.2.2" />
+
+ </dependencies>
+</ivy-module>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/ivysettings.xml b/org.eclipse.osbp.vaadin.addons.absolutelayout/ivysettings.xml
new file mode 100644
index 0000000..9c0f653
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/ivysettings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivysettings>
+ <settings defaultResolver="default" />
+ <resolvers>
+ <chain name="default">
+ <!-- Public Maven repository -->
+ <ibiblio name="public" m2compatible="true" />
+
+ <!-- Vaadin Add-on repository -->
+ <ibiblio name="vaadin-addons" usepoms="true" m2compatible="true"
+ root="http://maven.vaadin.com/vaadin-addons" />
+
+ <!-- Vaadin snapshots repository -->
+ <ibiblio name="vaadin-snapshots" usepoms="true" m2compatible="true"
+ root="https://oss.sonatype.org/content/repositories/vaadin-snapshots" />
+ <!-- Repository used for Vaadin modified smartsprites library -->
+ <dual name="custom-smartsprites">
+ <filesystem name="smartsprites-ivy">
+ <ivy pattern="${basedir}/ivymodule/[module]-ivy-[revision].xml" />
+ </filesystem>
+ <url name="smartsprites-artifact">
+ <artifact
+ pattern="http://dev.vaadin.com/svn/versions/6.8/build/smartsprites/lib/[artifact](-[revision]).[ext]" />
+ </url>
+ </dual>
+ </chain>
+ </resolvers>
+ <modules>
+ <!-- Vaadin patched SmartSprites -->
+ <module organisation="com.carrotsearch" name="smartsprites"
+ revision="0.2.3-itmill" resolver="custom-smartsprites" />
+ </modules>
+
+
+</ivysettings>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/license.html b/org.eclipse.osbp.vaadin.addons.absolutelayout/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse Foundation
+source code
+ repository ("Repository") in software modules ("Modules") and made
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+Fragments and associated material. Each Feature may be packaged as a
+sub-directory in a directory named "features". Within a Feature, files
+named "feature.xml" may contain a list of the names and version numbers
+of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+Features"). Within a Feature, files named "feature.xml" may contain a
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+ SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software,
+examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of
+allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning
+Technology
+ in accordance with the Specification. By using Provisioning
+Technology in such a manner and making it available in accordance with
+the
+ Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in
+which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing,
+extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable
+Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+Software Agreement must inform the user of the terms and conditions that
+ govern
+ the Installable Software and must solicit acceptance by the end
+user in the manner prescribed in such Installable Software Agreement.
+Upon such
+ indication of agreement by the user, the provisioning Technology
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use,
+and/or re-export to
+ another country, of encryption software. BEFORE using any encryption
+software, please check the country's laws, regulations and policies
+concerning the import,
+ possession, or use, and re-export of encryption software, to see if
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/pom.xml b/org.eclipse.osbp.vaadin.addons.absolutelayout/pom.xml
new file mode 100644
index 0000000..24eaf9f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/pom.xml
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.osbp.releng.maven</groupId>
+ <artifactId>org.eclipse.osbp.releng.maven.parent.mbp</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath />
+ </parent>
+
+ <groupId>org.eclipse.osbp.vaadin.addons</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.addons.absolutelayout</artifactId>
+ <packaging>bundle</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-server</artifactId>
+ <version>${vaadin.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-client</artifactId>
+ <version>${vaadin.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.osbp.dependencies</groupId>
+ <artifactId>org.eclipse.osbp.dependencies.bundle.vaadin.addon.dragdroplayouts</artifactId>
+ <version>1.1.3-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>${basedir}/src</sourceDirectory>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.0</version>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-Name>OSBP Addon for Vaadin: Absolute Layout</Bundle-Name>
+ <Bundle-SymbolicName>org.eclipse.osbp.vaadin.addons.absolutelayout</Bundle-SymbolicName>
+ <Bundle-Version>0.9.0.{osgi-version-qualifier}</Bundle-Version>
+ <Require-Bundle>com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+ org.jsoup;bundle-version="[1.8.3,1.8.4)",
+ dragdroplayouts.osgi;bundle-version="[1.1.3,1.1.4)"
+ </Require-Bundle>
+ <Import-Package>
+ com.vaadin.*;version="[7.5.7,7.7.0)",
+ !fi.jasoft.*,
+ javax.servlet.annotation;resolution:=optional,
+ *
+ </Import-Package>
+ <Export-Package>
+ !LICENSE,!LICENSE.txt,!THIRD-PARTY.txt,!NOTICE,!README.txt,!VERSION.txt,!build.properties,
+ !VAADIN.*,
+ org.eclipse.osbp.vaadin.addons.*;version="0.9.0"
+ </Export-Package>
+ <Include-Resource>{maven-resources},LICENSE.txt,epl-v10.html</Include-Resource>
+ <_nouses>true</_nouses>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.2.1</version>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+
+ <!--This plugin's configuration is used to store Eclipse m2e settings
+ only. It has no influence on the Maven build itself. -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.maven.plugins
+ </groupId>
+ <artifactId>
+ maven-dependency-plugin
+ </artifactId>
+ <versionRange>
+ [2.0.0,)
+ </versionRange>
+ <goals>
+ <goal>
+ copy-dependencies
+ </goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>com.vaadin</groupId>
+ <artifactId>
+ vaadin-maven-plugin
+ </artifactId>
+ <versionRange>
+ [7.0-SNAPSHOT,)
+ </versionRange>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <!-- This is needed for the sources required by the client-side compiler
+ to be included in the produced JARs -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ </resource>
+ </resources>
+
+ </build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/sample/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutUI.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/sample/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutUI.java
new file mode 100644
index 0000000..24a29c5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/sample/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutUI.java
@@ -0,0 +1,229 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+
+package org.eclipse.osbp.vaadin.addons.absolutelayout;
+
+import javax.servlet.annotation.WebServlet;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.data.Property;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+import fi.jasoft.dragdroplayouts.client.ui.LayoutDragMode;
+import fi.jasoft.dragdroplayouts.drophandlers.DefaultAbsoluteLayoutDropHandler;
+
+/**
+ * The Class AbsoluteLayoutUI.
+ */
+@SuppressWarnings("serial")
+@Theme("valo")
+public class AbsoluteLayoutUI extends UI {
+
+ /**
+ * The Class Servlet.
+ */
+ @WebServlet(value = "/*", asyncSupported = true)
+ @VaadinServletConfiguration(productionMode = false, ui = AbsoluteLayoutUI.class, widgetset = "org.eclipse.osbp.vaadin.addons.absolutelayout.AbsoluteLayoutWidgetset")
+ public static class Servlet extends VaadinServlet {
+ }
+
+ /** The layout1. */
+ private AbsoluteLayout layout1;
+
+ /** The layout2. */
+ private AbsoluteLayout layout2;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.UI#init(com.vaadin.server.VaadinRequest)
+ */
+ @Override
+ protected void init(VaadinRequest request) {
+
+ HorizontalLayout main = new HorizontalLayout();
+ main.setSpacing(true);
+ main.setMargin(true);
+ main.setSizeFull();
+
+ VerticalLayout buttons = new VerticalLayout();
+ main.addComponent(buttons);
+
+ Button b = new Button("new", new Button.ClickListener() {
+ @Override
+ public void buttonClick(Button.ClickEvent event) {
+ TextField f = new TextField("Foo");
+ f.addStyleName("bar");
+ layout1.addComponent(f);
+ }
+ });
+ buttons.addComponent(b);
+
+ Button allNew = new Button("all new", new Button.ClickListener() {
+ @Override
+ public void buttonClick(Button.ClickEvent event) {
+ layout1.removeAllComponents();
+ layout2.removeAllComponents();
+
+ createLayout(layout1);
+ createLayout(layout2);
+ }
+ });
+ buttons.addComponent(allNew);
+ buttons.setWidth("120px");
+
+ Panel p1 = new Panel();
+ p1.setSizeFull();
+ main.addComponent(p1);
+ main.setExpandRatio(p1, 1.0f);
+
+ HorizontalLayout h1 = new HorizontalLayout();
+ h1.setSpacing(true);
+ h1.setMargin(true);
+ h1.setSizeFull();
+ p1.setContent(h1);
+
+ layout1 = new AbsoluteLayout();
+ layout1.setSizeFull();
+ h1.addComponent(layout1);
+ h1.setExpandRatio(layout1, 1.0f);
+ layout1.setDragMode(LayoutDragMode.CLONE);
+ layout1.setDropHandler(new DefaultAbsoluteLayoutDropHandler());
+ layout1.setResizable(true);
+ layout1.setUseAlignments(true);
+ createLayout(layout1);
+
+ Panel p2 = new Panel();
+ p2.setSizeFull();
+ main.addComponent(p2);
+ main.setExpandRatio(p2, 1.0f);
+
+ HorizontalLayout h2 = new HorizontalLayout();
+ h2.setSpacing(true);
+ h2.setMargin(true);
+ h2.setSizeFull();
+ p2.setContent(h2);
+
+ layout2 = new AbsoluteLayout();
+ layout2.setSizeFull();
+ h2.addComponent(layout2);
+ h2.setExpandRatio(layout2, 1.0f);
+ layout2.setDragMode(LayoutDragMode.CLONE);
+ layout2.setDropHandler(new DefaultAbsoluteLayoutDropHandler());
+ layout2.setResizable(true);
+ layout2.setUseAlignments(true);
+ createLayout(layout2);
+
+ setContent(main);
+ }
+
+ /**
+ * Creates the layout.
+ *
+ * @param layout
+ * the main
+ * @return the absolute layout
+ */
+ private AbsoluteLayout createLayout(AbsoluteLayout layout) {
+
+ ComponentPosition pos = layout.new ComponentPosition();
+
+ final CheckBox resize = new CheckBox("resize");
+ resize.setImmediate(true);
+ resize.setValue(true);
+ setSizeFull(resize);
+ resize.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ layout.setResizable(resize.getValue());
+ }
+ });
+ pos.setLeft(30f, Unit.PIXELS);
+ pos.setTop(30f, Unit.PIXELS);
+ layout.addComponent(resize, pos.getCSSString());
+
+ final CheckBox drag = new CheckBox("drag");
+ drag.setImmediate(true);
+ drag.setValue(true);
+ setSizeFull(drag);
+ drag.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ if (drag.getValue()) {
+ layout.setDragMode(LayoutDragMode.CLONE);
+ } else {
+ layout.setDragMode(LayoutDragMode.NONE);
+ }
+ }
+ });
+ pos.setLeft(130f, Unit.PIXELS);
+ pos.setTop(30f, Unit.PIXELS);
+ layout.addComponent(drag, pos.getCSSString());
+
+ final CheckBox alignments = new CheckBox("alignments");
+ alignments.setImmediate(true);
+ alignments.setValue(true);
+ setSizeFull(alignments);
+ alignments.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ layout.setUseAlignments(alignments.getValue());
+ }
+ });
+ pos.setLeft(230f, Unit.PIXELS);
+ pos.setTop(30f, Unit.PIXELS);
+ layout.addComponent(alignments, pos.getCSSString());
+
+ TextField text = new TextField("Type me");
+ pos.setLeft(120f, Unit.PIXELS);
+ pos.setTop(200f, Unit.PIXELS);
+ setSizeFull(text);
+ layout.addComponent(text, pos.getCSSString());
+
+ Button button2 = new Button("Click Me2");
+ pos.setLeft(300f, Unit.PIXELS);
+ pos.setTop(300f, Unit.PIXELS);
+ setSizeFull(button2);
+ layout.addComponent(button2, pos.getCSSString());
+
+ CheckBox checkbox = new CheckBox("Check me");
+ pos.setLeft(470f, Unit.PIXELS);
+ pos.setTop(390f, Unit.PIXELS);
+ setSizeFull(checkbox);
+ layout.addComponent(checkbox, pos.getCSSString());
+
+ return layout;
+ }
+
+ /**
+ * Sets the size full.
+ *
+ * @param resize
+ * the new size full
+ */
+ private void setSizeFull(final Component resize) {
+ // resize.setSizeFull();
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/VAADIN/addons/osbee/vaadin/addons/absolutelayout/styles.scss b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/VAADIN/addons/osbee/vaadin/addons/absolutelayout/styles.scss
new file mode 100644
index 0000000..cba72d5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/VAADIN/addons/osbee/vaadin/addons/absolutelayout/styles.scss
@@ -0,0 +1,63 @@
+@mixin osbee-absolutelayout {
+
+ .v-absolutelayout .o-alignmentLine {
+ // the color of the alignment line
+ background-color: green;
+ }
+
+ .o-absolutelayout{
+ // the amount of pixels, a snap to alignment lines is done
+ snap: 7;
+ }
+
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable {
+ &.resizing {
+ overflow: visible;
+ }
+ .drag-overlay {
+ border: 1px solid red;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: absolute;
+ z-index: 10;
+ }
+ .tlc, .te, .trc, .re, .brc, .be, .blc, .le {
+ background-color: transparent;
+ display: block;
+ overflow: visible;
+ position: absolute;
+ }
+ div.unused {
+ cursor: default !important;
+ }
+ .te {
+ cursor: ns-resize;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 6;
+ }
+ .re {
+ cursor: ew-resize;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 5;
+ }
+ .le {
+ cursor: ew-resize;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 5;
+ }
+ .be {
+ cursor: ns-resize;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 6;
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayout.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayout.java
new file mode 100644
index 0000000..24eb08a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayout.java
@@ -0,0 +1,382 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+
+import org.eclipse.osbp.vaadin.addons.absolutelayout.client.OAbsoluteLayoutServerRpc;
+import org.eclipse.osbp.vaadin.addons.absolutelayout.client.OAbsoluteLayoutState;
+import org.eclipse.osbp.vaadin.addons.absolutelayout.client.OResizeLocation;
+
+import com.vaadin.shared.Connector;
+import com.vaadin.ui.Component;
+import com.vaadin.util.ReflectTools;
+
+import fi.jasoft.dragdroplayouts.DDAbsoluteLayout;
+import fi.jasoft.dragdroplayouts.client.ui.LayoutDragMode;
+
+/**
+ * OS.bee AbsoluteLayout. <br>
+ * This layout supports resizing its elements. And also supports drag and drop
+ * of elemens.
+ * <p>
+ * Only DragModes NONE and COPY are allowed
+ */
+@SuppressWarnings("serial")
+public class AbsoluteLayout extends DDAbsoluteLayout {
+
+ /** The rpc. */
+ private OAbsoluteLayoutServerRpc rpc = new OAbsoluteLayoutServerRpc() {
+ @Override
+ public void resized(Connector connector, int newWidth, int newHeight, int oldWidth, int oldHeight,
+ OResizeLocation location) {
+ internalResizeChild((Component) connector, newWidth, newHeight, oldWidth, oldHeight, location);
+
+ fireEvent(new ChildResizedEvent((Component) connector, newWidth, newHeight, oldWidth, oldHeight, location));
+ }
+ };
+
+ /**
+ * Instantiates a new absolute layout.
+ */
+ public AbsoluteLayout() {
+ registerRpc(rpc);
+ }
+
+ /* (non-Javadoc)
+ * @see fi.jasoft.dragdroplayouts.DDAbsoluteLayout#getState()
+ */
+ @Override
+ public OAbsoluteLayoutState getState() {
+ return (OAbsoluteLayoutState) super.getState();
+ }
+
+ /* (non-Javadoc)
+ * @see fi.jasoft.dragdroplayouts.DDAbsoluteLayout#getState(boolean)
+ */
+ @Override
+ protected OAbsoluteLayoutState getState(boolean markAsDirty) {
+ return (OAbsoluteLayoutState) super.getState(markAsDirty);
+ }
+
+ /**
+ * Internal resize child.
+ *
+ * @param child the child
+ * @param newWidth the new width
+ * @param newHeight the new height
+ * @param oldWidth the old width
+ * @param oldHeight the old height
+ * @param location the location
+ */
+ protected void internalResizeChild(Component child, int newWidth, int newHeight, int oldWidth, int oldHeight,
+ OResizeLocation location) {
+ switch (location) {
+ case TOP_LEFT:
+ moveLeft(oldWidth - newWidth, child);
+ case TOP:
+ moveTop(oldHeight - newHeight, child);
+ break;
+ case TOP_RIGHT:
+ moveTop(oldHeight - newHeight, child);
+ case RIGHT:
+ moveRight(oldWidth - newWidth, child);
+ break;
+ case BOTTOM_RIGHT:
+ moveRight(oldWidth - newWidth, child);
+ case BOTTOM:
+ moveBottom(oldHeight - newHeight, child);
+ break;
+ case BOTTOM_LEFT:
+ moveBottom(oldHeight - newHeight, child);
+ case LEFT:
+ moveLeft(oldWidth - newWidth, child);
+ break;
+ default:
+ break;
+ }
+ child.setWidth(newWidth, Unit.PIXELS);
+ child.setHeight(newHeight, Unit.PIXELS);
+ }
+
+ /**
+ * Adjusts the top position for the component when inside a
+ * {@link com.vaadin.ui.AbsoluteLayout} and top position was set with
+ * pixels.
+ *
+ * @param delta the change of top position in pixels
+ * @param child the component that is inside the absolute layout
+ */
+ protected void moveTop(int delta, Component child) {
+ ComponentPosition position = getPosition(child);
+ if (position.getTopValue() != null && position.getTopUnits().equals(Unit.PIXELS)) {
+ float newValue = (position.getTopValue() + delta);
+ if (newValue < 0) {
+ newValue = 0;
+ }
+ position.setTopValue(newValue);
+ setPosition(child, position);
+ } else {
+ // position bottom set, NOOP
+ }
+ }
+
+ /**
+ * Adjusts the bottom position for the component when inside a
+ * {@link com.vaadin.ui.AbsoluteLayout} and bottom position was set with
+ * pixels.
+ *
+ * @param delta the change of bottom position in pixels
+ * @param child the component that is inside the absolute layout
+ */
+ protected void moveBottom(int delta, Component child) {
+ ComponentPosition position = getPosition(child);
+ if (position.getBottomValue() != null && position.getBottomUnits().equals(Unit.PIXELS)) {
+ float newValue = (position.getBottomValue() + delta);
+ if (newValue < 0) {
+ newValue = 0;
+ }
+ position.setBottomValue(newValue);
+ setPosition(child, position);
+ } else {
+ // position top used, NOOP
+ }
+ }
+
+ /**
+ * Adjusts the right position for the component when inside a
+ * {@link com.vaadin.ui.AbsoluteLayout} and right position was set with
+ * pixels.
+ *
+ * @param delta the change of right position in pixels
+ * @param child the child
+ */
+ protected void moveRight(int delta, Component child) {
+ ComponentPosition position = getPosition(child);
+ if (position.getRightValue() != null && position.getRightUnits().equals(Unit.PIXELS)) {
+ float newValue = (position.getRightValue() + delta);
+ if (newValue < 0) {
+ newValue = 0;
+ }
+ position.setRightValue(newValue);
+ setPosition(child, position);
+ } else {
+ // position left used, NOOP
+ }
+ }
+
+ /**
+ * Adjusts the left position for the component when inside a
+ * {@link com.vaadin.ui.AbsoluteLayout} and left position was set with
+ * pixels.
+ *
+ * @param delta the change of left position in pixels
+ * @param child the component that is inside the absolute layout
+ */
+ protected void moveLeft(int delta, Component child) {
+ ComponentPosition position = getPosition(child);
+ if (position.getLeftValue() != null && position.getLeftUnits().equals(Unit.PIXELS)) {
+ float newValue = (position.getLeftValue() + delta);
+ if (newValue < 0) {
+ newValue = 0;
+ }
+ position.setLeftValue(newValue);
+ setPosition(child, position);
+ } else {
+ // position right set, NOOP
+ }
+ }
+
+ /**
+ * True, if the children should be resizable.
+ *
+ * @return true, if is resizable
+ */
+ public boolean isResizable() {
+ return getState(false).useResizing;
+ }
+
+ /**
+ * True, if the children should be resizable.
+ *
+ * @param value the new resizable
+ */
+ public void setResizable(boolean value) {
+ if (getState(false).useResizing != value) {
+ getState().useResizing = value;
+ }
+ }
+
+ /**
+ * True, if alignments should be used.
+ *
+ * @return true, if is use alignments
+ */
+ public boolean isUseAlignments() {
+ return getState(false).useAlignments;
+ }
+
+ /**
+ * True, if alignments should be used.
+ *
+ * @param value the new use alignments
+ */
+ public void setUseAlignments(boolean value) {
+ if (getState(false).useAlignments != value) {
+ getState().useAlignments = value;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see fi.jasoft.dragdroplayouts.DDAbsoluteLayout#setDragMode(fi.jasoft.dragdroplayouts.client.ui.LayoutDragMode)
+ */
+ @Override
+ public void setDragMode(LayoutDragMode mode) {
+ if (mode != LayoutDragMode.NONE && mode != LayoutDragMode.CLONE) {
+ throw new IllegalArgumentException("Mode is not supported!");
+ }
+ super.setDragMode(mode);
+ }
+
+ /**
+ * Add listener which is being notified if a child should be resized.
+ *
+ * @param listener the listener
+ */
+ public void addChildResizedListener(ChildResizedListener listener) {
+ addListener(ChildResizedEvent.class, listener, ChildResizedListener.CHILD_RESIZED_METHOD);
+ }
+
+ /**
+ * Removes listener which is being notified if a child should be resized.
+ *
+ * @param listener the listener
+ */
+ public void removeChildResizedListener(ChildResizedListener listener) {
+ removeListener(ChildResizedEvent.class, listener);
+ }
+
+ /**
+ * The Class ChildResizedEvent.
+ */
+ public static class ChildResizedEvent extends Event {
+
+ /** The new width. */
+ private final int newWidth;
+
+ /** The new height. */
+ private final int newHeight;
+
+ /** The old width. */
+ private final int oldWidth;
+
+ /** The old height. */
+ private final int oldHeight;
+
+ /** The location. */
+ private final OResizeLocation location;
+
+ /**
+ * Instantiates a new child resized event.
+ *
+ * @param source the source
+ * @param newWidth the new width
+ * @param newHeight the new height
+ * @param oldWidth the old width
+ * @param oldHeight the old height
+ * @param location the location
+ */
+ public ChildResizedEvent(Component source, int newWidth, int newHeight, int oldWidth, int oldHeight,
+ OResizeLocation location) {
+ super(source);
+ this.newWidth = newWidth;
+ this.newHeight = newHeight;
+ this.oldWidth = oldWidth;
+ this.oldHeight = oldHeight;
+ this.location = location;
+ }
+
+ /**
+ * Gets the new width.
+ *
+ * @return the new width
+ */
+ public int getNewWidth() {
+ return newWidth;
+ }
+
+ /**
+ * Gets the new height.
+ *
+ * @return the new height
+ */
+ public int getNewHeight() {
+ return newHeight;
+ }
+
+ /**
+ * Gets the old width.
+ *
+ * @return the old width
+ */
+ public int getOldWidth() {
+ return oldWidth;
+ }
+
+ /**
+ * Gets the old height.
+ *
+ * @return the old height
+ */
+ public int getOldHeight() {
+ return oldHeight;
+ }
+
+ /**
+ * Gets the location.
+ *
+ * @return the location
+ */
+ public OResizeLocation getLocation() {
+ return location;
+ }
+
+ }
+
+ /**
+ * The listener interface for receiving childResized events.
+ * The class that is interested in processing a childResized
+ * event implements this interface, and the object created
+ * with that class is registered with a component using the
+ * component's <code>addChildResizedListener</code> method. When
+ * the childResized event occurs, that object's appropriate
+ * method is invoked.
+ *
+ * @see ChildResizedEvent
+ */
+ public interface ChildResizedListener extends Serializable {
+
+ /** The Constant CHILD_RESIZED_METHOD. */
+ public static final Method CHILD_RESIZED_METHOD = ReflectTools.findMethod(ChildResizedListener.class,
+ "childResized", ChildResizedEvent.class);
+
+ /**
+ * Child resized.
+ *
+ * @param event the event
+ */
+ void childResized(ChildResizedEvent event);
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutWidgetset.gwt.xml b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutWidgetset.gwt.xml
new file mode 100644
index 0000000..4699e48
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutWidgetset.gwt.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
+<module>
+ <inherits name="com.vaadin.DefaultWidgetSet" />
+
+ <!--
+ Uncomment the following to compile the widgetset for one browser only.
+ Multiple browsers can be specified as a comma separated list. The supported
+ user agents at the moment of writing were: ie8,ie9,gecko1_8,safari,opera
+ The value gecko1_8 is used for Firefox and safari is used for webkit based
+ browsers including Google Chrome.
+ <set-property name="user.agent" value="safari" />
+
+ To enable SuperDevMode, uncomment this line. See https://vaadin.com/wiki/-/wiki/Main/Using%20SuperDevMode
+ for more information and instructions.
+ <set-configuration-property name="devModeRedirectEnabled" value="true" />
+ />
+ -->
+
+<!-- <add-linker name="xsiframe" /> -->
+<!-- <set-configuration-property name="devModeRedirectEnabled" value="true" /> -->
+
+ <inherits name="fi.jasoft.dragdroplayouts.DragDropLayoutsWidgetSet" />
+
+ <stylesheet src="oabsolutelayout/styles.css" />
+
+</module>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/IOConstants.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/IOConstants.java
new file mode 100644
index 0000000..1083f19
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/IOConstants.java
@@ -0,0 +1,30 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+/**
+ * The Interface IOConstants.
+ */
+public interface IOConstants {
+
+ /**
+ * Divs for the resizing operations are marked with this css class.
+ */
+ public static final String CSS_RESIZE_DIV = "o-resize-div";
+
+ /**
+ * Is used to define the snap css property in pixels.
+ */
+ public static final String CSS_SNAP_PROPERTY = "snap";
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutClientRpc.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutClientRpc.java
new file mode 100644
index 0000000..3a61e01
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutClientRpc.java
@@ -0,0 +1,37 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import com.vaadin.shared.communication.ClientRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface OAbsoluteLayoutClientRpc.
+ */
+public interface OAbsoluteLayoutClientRpc extends ClientRpc {
+
+ /**
+ * True if alignments should be used. False otherwise.
+ *
+ * @param value the new use alignments
+ */
+ public void setUseAlignments(boolean value);
+
+ /**
+ * True if resizing should be used. False otherwise.
+ *
+ * @param value the new use resizing
+ */
+ public void setUseResizing(boolean value);
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutConnector.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutConnector.java
new file mode 100644
index 0000000..a41e001
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutConnector.java
@@ -0,0 +1,104 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import org.eclipse.osbp.vaadin.addons.absolutelayout.AbsoluteLayout;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.communication.RpcProxy;
+import com.vaadin.client.communication.StateChangeEvent;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.ui.Connect;
+
+import fi.jasoft.dragdroplayouts.client.ui.absolutelayout.DDAbsoluteLayoutConnector;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OAbsoluteLayoutConnector.
+ */
+@Connect(AbsoluteLayout.class)
+public class OAbsoluteLayoutConnector extends DDAbsoluteLayoutConnector implements OChildResizeListener {
+
+ /** The Constant serialVersionUID. */
+ private static final long serialVersionUID = -3501965859455838012L;
+
+ /** The rpc. */
+ OAbsoluteLayoutServerRpc rpc = RpcProxy.create(OAbsoluteLayoutServerRpc.class, this);
+
+ /**
+ * Instantiates a new o absolute layout connector.
+ */
+ public OAbsoluteLayoutConnector() {
+ registerRpc(OAbsoluteLayoutClientRpc.class, new OAbsoluteLayoutClientRpc() {
+ private static final long serialVersionUID = 8264383260169834245L;
+
+ @Override
+ public void setUseAlignments(boolean value) {
+ getWidget().setUseAlignments(value);
+ }
+
+ @Override
+ public void setUseResizing(boolean value) {
+ getWidget().setUseResizing(value);
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.AbstractComponentConnector#createWidget()
+ */
+ @Override
+ protected Widget createWidget() {
+ OAbsoluteLayoutWidget widget = GWT.create(OAbsoluteLayoutWidget.class);
+ widget.setResizeListener(this);
+ return widget;
+ }
+
+ /* (non-Javadoc)
+ * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.DDAbsoluteLayoutConnector#getWidget()
+ */
+ @Override
+ public OAbsoluteLayoutWidget getWidget() {
+ return (OAbsoluteLayoutWidget) super.getWidget();
+ }
+
+ /* (non-Javadoc)
+ * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.DDAbsoluteLayoutConnector#getState()
+ */
+ @Override
+ public OAbsoluteLayoutState getState() {
+ return (OAbsoluteLayoutState) super.getState();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.absolutelayout.AbsoluteLayoutConnector#onStateChanged(com.vaadin.client.communication.StateChangeEvent)
+ */
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+
+ getWidget().setUseAlignments(getState().useAlignments);
+ getWidget().setUseResizing(getState().useResizing);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.vaadin.addons.absolutelayout.client.OChildResizeListener#resized(com.vaadin.shared.Connector, int, int, int, int, org.eclipse.osbp.vaadin.addons.absolutelayout.client.OResizeLocation)
+ */
+ @Override
+ public void resized(Connector child, int newWidth, int newHeight, int oldWidth, int oldHeight,
+ OResizeLocation location) {
+ rpc.resized(child, newWidth, newHeight, oldWidth, oldHeight, location);
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutServerRpc.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutServerRpc.java
new file mode 100644
index 0000000..a3cc7a2
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutServerRpc.java
@@ -0,0 +1,38 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.communication.ServerRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface OAbsoluteLayoutServerRpc.
+ */
+public interface OAbsoluteLayoutServerRpc extends ServerRpc {
+
+ /**
+ * Is called if the given connector was resized. So the server layout needs
+ * to update the position of the child.
+ *
+ * @param connector the connector
+ * @param newWidth the new width
+ * @param newHeight the new height
+ * @param oldWidth the old width
+ * @param oldHeight the old height
+ * @param location the location
+ */
+ void resized(Connector connector, int newWidth, int newHeight, int oldWidth, int oldHeight,
+ OResizeLocation location);
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutState.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutState.java
new file mode 100644
index 0000000..d267cdb
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutState.java
@@ -0,0 +1,30 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OAbsoluteLayoutState.
+ */
+public class OAbsoluteLayoutState extends fi.jasoft.dragdroplayouts.client.ui.absolutelayout.DDAbsoluteLayoutState {
+
+ /** The Constant serialVersionUID. */
+ private static final long serialVersionUID = -138381612142479069L;
+
+ /** The use alignments. */
+ public boolean useAlignments;
+
+ /** The use resizing. */
+ public boolean useResizing;
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutWidget.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutWidget.java
new file mode 100644
index 0000000..dfe0d3f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutWidget.java
@@ -0,0 +1,953 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.EventTarget;
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.dom.client.Style;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Event.NativePreviewEvent;
+import com.google.gwt.user.client.Event.NativePreviewHandler;
+import com.google.gwt.user.client.EventListener;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.WidgetCollection;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.Util;
+import com.vaadin.client.WidgetUtil;
+import com.vaadin.client.ui.dd.VDragEvent;
+
+import fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Absolute layout widget that supports drag and drop, resizing and alignment.
+ */
+public class OAbsoluteLayoutWidget extends VDDAbsoluteLayout {
+
+ /** The Constant CLASSNAME. */
+ public static final String CLASSNAME = "o-absolutelayout";
+
+ /** The resize listener. */
+ protected OChildResizeListener resizeListener;
+
+ /** The use resizing. */
+ protected boolean useResizing;
+
+ /**
+ * Instantiates a new o absolute layout widget.
+ */
+ public OAbsoluteLayoutWidget() {
+ addStyleName(CLASSNAME);
+ }
+
+ /* (non-Javadoc)
+ * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout#postDropHook(com.vaadin.client.ui.dd.VDragEvent)
+ */
+ @Override
+ protected boolean postDropHook(VDragEvent drag) {
+ boolean result = super.postDropHook(drag);
+
+ OAlignmentManager.get().updateDropDetails(drag);
+ OAlignmentManager.get().stop();
+
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout#postEnterHook(com.vaadin.client.ui.dd.VDragEvent)
+ */
+ @Override
+ protected void postEnterHook(VDragEvent drag) {
+ super.postEnterHook(drag);
+
+ updateDrag(drag);
+ }
+
+ /* (non-Javadoc)
+ * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout#postLeaveHook(com.vaadin.client.ui.dd.VDragEvent)
+ */
+ @Override
+ protected void postLeaveHook(VDragEvent drag) {
+ super.postLeaveHook(drag);
+
+ updateDrag(drag);
+ }
+
+ /* (non-Javadoc)
+ * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout#postOverHook(com.vaadin.client.ui.dd.VDragEvent)
+ */
+ @Override
+ protected void postOverHook(VDragEvent drag) {
+ super.postOverHook(drag);
+
+ updateDrag(drag);
+ }
+
+ /**
+ * Updates the drag information and alignments.
+ *
+ * @param drag the drag
+ */
+ private void updateDrag(VDragEvent drag) {
+ if (!OAlignmentManager.get().isActive()) {
+ OAlignmentManager.get().startDragAndDrop(this);
+ }
+ OAlignmentManager.get().updateAlignmentsForDrop(drag);
+ }
+
+ /**
+ * True, if alignments should be used. False otherwise.
+ *
+ * @param useAlignments the new use alignments
+ */
+ public void setUseAlignments(boolean useAlignments) {
+ OAlignmentManager.get().setUseAlignments(useAlignments);
+ }
+
+ /**
+ * True, if resizing should be used. False otherwise.
+ *
+ * @param useResizing the new use resizing
+ */
+ public void setUseResizing(boolean useResizing) {
+ this.useResizing = useResizing;
+
+ for (Widget child : getChildren()) {
+ if (child instanceof ResizableAbsoluteWrapper) {
+ ResizableAbsoluteWrapper wrapper = (ResizableAbsoluteWrapper) child;
+ wrapper.setResizable(useResizing);
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.user.client.ui.ComplexPanel#getChildren()
+ */
+ public WidgetCollection getChildren() {
+ return super.getChildren();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.VAbsoluteLayout#add(com.google.gwt.user.client.ui.Widget)
+ */
+ @Override
+ public void add(Widget child) {
+ ResizableAbsoluteWrapper wrapper = new ResizableAbsoluteWrapper(child);
+ super.add(wrapper, canvas);
+ }
+
+ /**
+ * Returns true, if alignments are used. False otherwise.
+ *
+ * @return true, if is use alignments
+ */
+ public boolean isUseAlignments() {
+ return OAlignmentManager.get().isUseAlignments();
+ }
+
+ /**
+ * Sets the resize listener.
+ *
+ * @param resizeListener the new resize listener
+ */
+ public void setResizeListener(OChildResizeListener resizeListener) {
+ this.resizeListener = resizeListener;
+ }
+
+ /**
+ * The Class ResizeHandler.
+ */
+ protected static class ResizeHandler implements EventListener {
+
+ /** The wrapper. */
+ protected final ResizableAbsoluteWrapper wrapper;
+
+ /** The start client x. */
+ protected int startClientX = 0;
+
+ /** The start client y. */
+ protected int startClientY = 0;
+
+ /** The start width. */
+ protected int startWidth = 0;
+
+ /** The start height. */
+ protected int startHeight = 0;
+
+ /** The resizing x. */
+ protected boolean resizingX;
+
+ /** The revert x. */
+ protected boolean revertX;
+
+ /** The revert y. */
+ protected boolean revertY;
+
+ /** The resizing y. */
+ protected boolean resizingY;
+
+ /** The dragged element. */
+ // TODO remove me later -> Same as wrapper?
+ protected Element draggedElement;
+
+ /** The waiting accept. */
+ protected boolean waitingAccept;
+
+ /** The cancel listener registration. */
+ protected HandlerRegistration cancelListenerRegistration;
+
+ /** The resize canceled. */
+ protected boolean resizeCanceled;
+
+ /** The keep aspect ratio. */
+ protected boolean keepAspectRatio;
+
+ /** The old width. */
+ protected int oldWidth;
+
+ /** The old height. */
+ protected int oldHeight;
+
+ /** The resize location. */
+ protected OResizeLocation resizeLocation;
+
+ /** The Constant locationToCursorMap. */
+ @SuppressWarnings("serial")
+ protected static final Map<OResizeLocation, String> locationToCursorMap = new HashMap<OResizeLocation, String>() {
+ {
+ // put(CResizeLocation.TOP_LEFT, "nwse-resize");
+ put(OResizeLocation.TOP, "ns-resize");
+ // put(CResizeLocation.TOP_RIGHT, "nesw-resize");
+ put(OResizeLocation.RIGHT, "ew-resize");
+ // put(CResizeLocation.BOTTOM_RIGHT, "nwse-resize");
+ put(OResizeLocation.BOTTOM, "ns-resize");
+ // put(CResizeLocation.BOTTOM_LEFT, "nesw-resize");
+ put(OResizeLocation.LEFT, "ew-resize");
+ }
+ };
+
+ /**
+ * Instantiates a new resize handler.
+ *
+ * @param wrapper the wrapper
+ */
+ public ResizeHandler(ResizableAbsoluteWrapper wrapper) {
+ this.wrapper = wrapper;
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.user.client.EventListener#onBrowserEvent(com.google.gwt.user.client.Event)
+ */
+ @Override
+ public void onBrowserEvent(Event event) {
+ final EventTarget currentTarget = event.getCurrentEventTarget();
+ final Element target = currentTarget.cast();
+ final Element targetParent = target.getParentElement();
+ if (resizingX || resizingY || wrapper.getElement().equals(targetParent)
+ || (targetParent != null && wrapper.getElement().equals(targetParent.getParentElement()))) {
+ switch (event.getTypeInt()) {
+ case Event.ONMOUSEMOVE:
+ onMouseMove(event);
+ break;
+ case Event.ONMOUSEDOWN:
+ onResizeStart(event, target);
+ break;
+ case Event.ONMOUSEUP:
+ onResizeEnd(event);
+ break;
+ default:
+ break;
+ }
+ } else if (resizeCanceled && event.getTypeInt() == Event.ONMOUSEUP) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+
+ /**
+ * On mouse move.
+ *
+ * @param event the event
+ */
+ protected void onMouseMove(Event event) {
+ if (!resizingX && !resizingY) {
+ return;
+ }
+
+ double height = -1.0;
+ double width = -1.0;
+
+ if (resizingY) {
+ int clientY = WidgetUtil.getTouchOrMouseClientY(event);
+ if (!isInVerticalBoundary(event)) {
+ // set the size to the edge of the boundary element
+ clientY = clientY < wrapper.getElement().getAbsoluteTop()
+ ? (wrapper.getElement().getAbsoluteTop() + 2)
+ : (wrapper.getElement().getAbsoluteBottom() - 2);
+ }
+ int extraScrollHeight = wrapper.getElement() == null ? 0 : wrapper.getElement().getScrollTop();
+ height = startHeight + extraScrollHeight + (revertY ? startClientY - clientY : clientY - startClientY);
+ event.stopPropagation();
+ }
+
+ if (resizingX) {
+ int clientX = WidgetUtil.getTouchOrMouseClientX(event);
+ if (!isInHorizontalBoundary(event)) {
+ // set the size to the edge of the boundary element
+ clientX = clientX < wrapper.getElement().getAbsoluteLeft()
+ ? (wrapper.getElement().getAbsoluteLeft() + 2)
+ : (wrapper.getElement().getAbsoluteRight() - 2);
+ }
+ int extraScrollWidth = wrapper.getElement() == null ? 0 : wrapper.getElement().getScrollLeft();
+ width = startWidth + extraScrollWidth + (revertX ? startClientX - clientX : clientX - startClientX);
+ event.stopPropagation();
+ }
+
+ if (keepAspectRatio && (height > -1.0 || width > 1.0)) {
+ final double wRatio = width / startWidth;
+ final double hRatio = height / startHeight;
+
+ if (height == -1.0) {
+ height = startHeight * wRatio;
+ } else if (width == -1.0) {
+ width = startWidth * hRatio;
+ } else {
+ if (wRatio < hRatio) {
+ height = startHeight * wRatio;
+ } else {
+ width = startWidth * hRatio;
+ }
+
+ }
+
+ wrapper.dragOverlayElement.getStyle().setHeight(height, Unit.PX);
+ wrapper.dragOverlayElement.getStyle().setWidth(width, Unit.PX);
+ }
+
+ if (height > -1.0) {
+ wrapper.dragOverlayElement.getStyle().setHeight(height, Unit.PX);
+ }
+ if (width > -1.0) {
+ wrapper.dragOverlayElement.getStyle().setWidth(width, Unit.PX);
+ }
+
+ // notify about resizing
+ wrapper.notifyResizing((int) width, (int) height, oldWidth, oldHeight, resizeLocation, draggedElement,
+ wrapper.dragOverlayElement);
+
+ }
+
+ /**
+ * Checks if is in horizontal boundary.
+ *
+ * @param event the event
+ * @return true, if is in horizontal boundary
+ */
+ protected boolean isInHorizontalBoundary(Event event) {
+ if (wrapper.getParent().getElement() != null) {
+ int clientX = event.getClientX();
+ int right = wrapper.getParent().getElement().getAbsoluteRight() - 1;
+ int left = wrapper.getParent().getElement().getAbsoluteLeft() + 1;
+ return clientX > left && clientX < right;
+ }
+ return true;
+ }
+
+ /**
+ * Checks if is in vertical boundary.
+ *
+ * @param event the event
+ * @return true, if is in vertical boundary
+ */
+ protected boolean isInVerticalBoundary(Event event) {
+ if (wrapper.getParent().getElement() != null) {
+ int clientY = event.getClientY();
+ int top = wrapper.getParent().getElement().getAbsoluteTop() + 1;
+ int bottom = wrapper.getParent().getElement().getAbsoluteBottom() - 1;
+ return clientY > top && clientY < bottom;
+ }
+ return true;
+ }
+
+ /**
+ * Override cursor.
+ *
+ * @param location the location
+ */
+ protected void overrideCursor(OResizeLocation location) {
+ String cursorValue = locationToCursorMap.get(location);
+ if (wrapper.getElement() != null) {
+ wrapper.getElement().getStyle().setProperty("cursor", cursorValue);
+ }
+ wrapper.dragOverlayElement.getStyle().setProperty("cursor", cursorValue);
+ }
+
+ /**
+ * Stop cursor override.
+ */
+ protected void stopCursorOverride() {
+ if (wrapper.getElement() != null) {
+ wrapper.getElement().getStyle().clearCursor();
+ }
+ wrapper.dragOverlayElement.getStyle().clearCursor();
+ }
+
+ /**
+ * Mark boundary resizing.
+ */
+ protected void markBoundaryResizing() {
+ if (wrapper.getElement() != null) {
+ wrapper.getElement().addClassName("resizing-child");
+ }
+ }
+
+ /**
+ * Unmark boundary resizing.
+ */
+ protected void unmarkBoundaryResizing() {
+ if (wrapper.getElement() != null) {
+ wrapper.getElement().removeClassName("resizing-child");
+ }
+ }
+
+ /**
+ * Accept resize.
+ *
+ * @param accept the accept
+ */
+ protected void acceptResize(boolean accept) {
+ if (waitingAccept) {
+ waitingAccept = false;
+ OAlignmentManager.get().updateResizedWidget(accept, oldWidth, oldHeight);
+ OAlignmentManager.get().stop();
+
+ resizingX = false;
+ resizingY = false;
+ draggedElement = null;
+ wrapper.dragOverlayElement.removeFromParent();
+ Style style = wrapper.dragOverlayElement.getStyle();
+ style.clearTop();
+ style.clearRight();
+ style.clearBottom();
+ style.clearLeft();
+ style.clearHeight();
+ style.clearWidth();
+ startClientX = 0;
+ startClientY = 0;
+ startHeight = 0;
+ startWidth = 0;
+
+ oldWidth = 0;
+ oldHeight = 0;
+ resizeLocation = null;
+
+ wrapper.getElement().removeClassName("resizing");
+ }
+ }
+
+ /**
+ * On resize end.
+ *
+ * @param event the event
+ */
+ protected void onResizeEnd(Event event) {
+ if (resizingX || resizingY) {
+ resizingX = false;
+ resizingY = false;
+ waitingAccept = true;
+
+ keepAspectRatio = false;
+
+ Event.releaseCapture(draggedElement);
+ event.stopPropagation();
+
+ stopCursorOverride();
+ unmarkBoundaryResizing();
+
+ acceptResize(true);
+ }
+ }
+
+ /**
+ * On resize start.
+ *
+ * @param event the event
+ * @param target the target
+ */
+ protected void onResizeStart(Event event, Element target) {
+ if (!(resizingX || resizingY || waitingAccept)) {
+ resizeCanceled = false;
+ keepAspectRatio = false;
+ draggedElement = target;
+ // startWidth =
+ // WidgetUtil.getRequiredWidth(wrapper.getElement());
+ // startHeight =
+ // WidgetUtil.getRequiredHeight(wrapper.getElement());
+ startWidth = wrapper.getElement().getOffsetWidth();
+ startHeight = wrapper.getElement().getOffsetHeight();
+ if (target.equals(wrapper.topEdge) || target.equals(wrapper.bottomEdge)) {
+ resizeLocation = startVerticalResize(event, target);
+ } else if (target.equals(wrapper.leftEdge) || target.equals(wrapper.rightEdge)) {
+ resizeLocation = startHorizontalResize(event, target);
+ }
+ // else {
+ // resizeLocation = startDiagonalResize(event, target);
+ // }
+
+ // initialize the old values
+ oldWidth = wrapper.getElement().getOffsetWidth();
+ oldHeight = wrapper.getElement().getOffsetHeight();
+
+ wrapper.getElement().addClassName("resizing");
+ wrapper.getElement().appendChild(wrapper.dragOverlayElement);
+ Event.setCapture(draggedElement);
+ event.stopPropagation();
+
+ overrideCursor(resizeLocation);
+ markBoundaryResizing();
+ listenToKeyboard();
+
+ OAlignmentManager.get().startResize((OAbsoluteLayoutWidget) wrapper.getParent(), wrapper,
+ resizeLocation, wrapper.dragOverlayElement);
+ }
+ }
+
+ /**
+ * Listen to keyboard.
+ */
+ protected void listenToKeyboard() {
+ cancelListenerRegistration = Event.addNativePreviewHandler(new NativePreviewHandler() {
+
+ @Override
+ public void onPreviewNativeEvent(NativePreviewEvent event) {
+ if (event.getTypeInt() == Event.ONKEYDOWN && (resizingX || resizingY)) {
+ final int keyCode = event.getNativeEvent().getKeyCode();
+ if (keyCode == KeyCodes.KEY_ESCAPE) {
+ onResizeCancel(event.getNativeEvent());
+ } else if (keyCode == KeyCodes.KEY_SHIFT) {
+ keepAspectRatio = true;
+ }
+ } else if (event.getTypeInt() == Event.ONKEYUP && (resizingX || resizingY)) {
+ final int keyCode = event.getNativeEvent().getKeyCode();
+ if (keyCode == KeyCodes.KEY_SHIFT) {
+ keepAspectRatio = false;
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * On resize cancel.
+ *
+ * @param event the event
+ */
+ protected void onResizeCancel(NativeEvent event) {
+ if (cancelListenerRegistration != null) {
+ cancelListenerRegistration.removeHandler();
+ }
+ Event.releaseCapture(draggedElement);
+ event.stopPropagation();
+ event.preventDefault();
+
+ resizeCanceled = true;
+ waitingAccept = true;
+ acceptResize(false);
+
+ keepAspectRatio = false;
+
+ stopCursorOverride();
+ unmarkBoundaryResizing();
+ }
+
+ // protected CResizeLocation startDiagonalResize(Event event, Element
+ // target) {
+ // CResizeLocation resizeLocation;
+ // resizingX = true;
+ // resizingY = true;
+ //
+ // Style style = wrapper.dragOverlayElement.getStyle();
+ // startClientY = WidgetUtil.getTouchOrMouseClientY(event);
+ // style.setHeight(startHeight, Unit.PX);
+ // startClientX = WidgetUtil.getTouchOrMouseClientX(event);
+ // style.setWidth(startWidth, Unit.PX);
+ //
+ // if (target.equals(wrapper.topLeftCorner) ||
+ // target.equals(wrapper.topRightCorner)) {
+ // revertY = true;
+ // style.setBottom(0, Unit.PX);
+ // resizeLocation = target.equals(wrapper.topLeftCorner) ?
+ // CResizeLocation.TOP_LEFT
+ // : CResizeLocation.TOP_RIGHT;
+ // } else {
+ // revertY = false;
+ // style.setTop(0, Unit.PX);
+ // resizeLocation = target.equals(wrapper.bottomRightCorner) ?
+ // CResizeLocation.BOTTOM_RIGHT
+ // : CResizeLocation.BOTTOM_LEFT;
+ // }
+ // if (target.equals(wrapper.topLeftCorner) ||
+ // target.equals(wrapper.bottomLeftCorner)) {
+ // revertX = true;
+ // style.setRight(0, Unit.PX);
+ // } else {
+ // revertX = false;
+ // style.setLeft(0, Unit.PX);
+ // }
+ // return resizeLocation;
+ // }
+
+ /**
+ * Start vertical resize.
+ *
+ * @param event the event
+ * @param target the target
+ * @return the o resize location
+ */
+ protected OResizeLocation startVerticalResize(Event event, Element target) {
+ OResizeLocation resizeLocation;
+ resizingY = true;
+ Style style = wrapper.dragOverlayElement.getStyle();
+ startClientY = WidgetUtil.getTouchOrMouseClientY(event);
+ style.setHeight(startHeight, Unit.PX);
+
+ if (target.equals(wrapper.topEdge)) {
+ revertY = true;
+ style.setBottom(0, Unit.PX);
+ resizeLocation = OResizeLocation.TOP;
+ } else {
+ revertY = false;
+ style.setTop(0, Unit.PX);
+ resizeLocation = OResizeLocation.BOTTOM;
+ }
+ style.setLeft(0, Unit.PX);
+ style.setRight(0, Unit.PX);
+ return resizeLocation;
+ }
+
+ /**
+ * Start horizontal resize.
+ *
+ * @param event the event
+ * @param target the target
+ * @return the o resize location
+ */
+ protected OResizeLocation startHorizontalResize(Event event, Element target) {
+ OResizeLocation resizeLocation;
+ resizingX = true;
+ Style style = wrapper.dragOverlayElement.getStyle();
+ startClientX = WidgetUtil.getTouchOrMouseClientX(event);
+ style.setWidth(startWidth, Unit.PX);
+
+ if (target.equals(wrapper.leftEdge)) {
+ revertX = true;
+ style.setRight(0, Unit.PX);
+ resizeLocation = OResizeLocation.LEFT;
+ } else {
+ revertX = false;
+ style.setLeft(0, Unit.PX);
+ resizeLocation = OResizeLocation.RIGHT;
+ }
+ style.setTop(0, Unit.PX);
+ style.setBottom(0, Unit.PX);
+ return resizeLocation;
+ }
+
+ }
+
+ /**
+ * The Class ResizableAbsoluteWrapper.
+ */
+ public class ResizableAbsoluteWrapper extends AbsoluteWrapper {
+
+ /** The Constant O_RESIZABLE_STYLE_NAME. */
+ protected static final String O_RESIZABLE_STYLE_NAME = "o-resizable";
+
+ /** The Constant DEFAULT_DRAG_SIZE_PIXELS. */
+ protected static final int DEFAULT_DRAG_SIZE_PIXELS = 10;
+
+ // protected Element topLeftCorner;
+ // protected Element topRightCorner;
+ // protected Element bottomLeftCorner;
+ /** The top edge. */
+ // protected Element bottomRightCorner;
+ protected Element topEdge;
+
+ /** The right edge. */
+ protected Element rightEdge;
+
+ /** The bottom edge. */
+ protected Element bottomEdge;
+
+ /** The left edge. */
+ protected Element leftEdge;
+
+ /** The drag overlay element. */
+ protected Element dragOverlayElement;
+
+ /** The drag size pixels. */
+ protected int dragSizePixels;
+
+ /** The resizable. */
+ protected boolean resizable;
+
+ /** The resize handler. */
+ protected ResizeHandler resizeHandler;
+
+ /**
+ * Instantiates a new resizable absolute wrapper.
+ *
+ * @param child the child
+ */
+ public ResizableAbsoluteWrapper(Widget child) {
+ super(child);
+
+ resizeHandler = new ResizeHandler(this);
+
+ child.addStyleName(O_RESIZABLE_STYLE_NAME);
+ // getElement().addClassName("resizable");
+
+ initDOM();
+ initListeners();
+ setResizeLocationSize(DEFAULT_DRAG_SIZE_PIXELS);
+ }
+
+ /**
+ * Notify resized.
+ *
+ * @param width the width
+ * @param height the height
+ * @param oldWidth the old width
+ * @param oldHeight the old height
+ * @param location the location
+ */
+ public void notifyResized(int width, int height, int oldWidth, int oldHeight, OResizeLocation location) {
+ ComponentConnector c = Util.findConnectorFor(getWidget());
+ resizeListener.resized(c, width, height, oldWidth, oldHeight, location);
+ OAlignmentManager.get().resetAlignments();
+ }
+
+ /**
+ * Notify resizing.
+ *
+ * @param width the width
+ * @param height the height
+ * @param oldWidth the old width
+ * @param oldHeight the old height
+ * @param location the location
+ * @param draggedElement the dragged element
+ * @param dragOverlayElement the drag overlay element
+ */
+ public void notifyResizing(int width, int height, int oldWidth, int oldHeight, OResizeLocation location,
+ Element draggedElement, Element dragOverlayElement) {
+ OAlignmentManager.get().updateAlignmentsForResize(draggedElement, dragOverlayElement);
+ }
+
+ /**
+ * Notify resizing cancel.
+ */
+ public void notifyResizingCancel() {
+ OAlignmentManager.get().resetAlignments();
+ }
+
+ /**
+ * Inits the dom.
+ */
+ protected void initDOM() {
+ // topLeftCorner = DOM.createDiv();
+ // topLeftCorner.addClassName("tlc");
+ // topLeftCorner.addClassName(ICConstants.RESIZE_DIV);
+ // topRightCorner = DOM.createDiv();
+ // topRightCorner.addClassName("trc");
+ // topRightCorner.addClassName(ICConstants.RESIZE_DIV);
+ // bottomLeftCorner = DOM.createDiv();
+ // bottomLeftCorner.addClassName("blc");
+ // bottomLeftCorner.addClassName(ICConstants.RESIZE_DIV);
+ // bottomRightCorner = DOM.createDiv();
+ // bottomRightCorner.addClassName("brc");
+ // bottomRightCorner.addClassName(ICConstants.RESIZE_DIV);
+
+ topEdge = DOM.createDiv();
+ topEdge.addClassName("te");
+ topEdge.addClassName(IOConstants.CSS_RESIZE_DIV);
+ rightEdge = DOM.createDiv();
+ rightEdge.addClassName("re");
+ rightEdge.addClassName(IOConstants.CSS_RESIZE_DIV);
+ bottomEdge = DOM.createDiv();
+ bottomEdge.addClassName("be");
+ bottomEdge.addClassName(IOConstants.CSS_RESIZE_DIV);
+ leftEdge = DOM.createDiv();
+ leftEdge.addClassName("le");
+ leftEdge.addClassName(IOConstants.CSS_RESIZE_DIV);
+
+ dragOverlayElement = DOM.createDiv();
+ dragOverlayElement.addClassName("drag-overlay");
+
+ // topEdge.appendChild(topLeftCorner);
+ // topEdge.appendChild(topRightCorner);
+
+ // bottomEdge.appendChild(bottomLeftCorner);
+ // bottomEdge.appendChild(bottomRightCorner);
+
+ setResizable(true);
+ }
+
+ /**
+ * Inits the listeners.
+ */
+ protected void initListeners() {
+ // Event.sinkEvents(topLeftCorner, Event.MOUSEEVENTS);
+ // Event.sinkEvents(topRightCorner, Event.MOUSEEVENTS);
+ // Event.sinkEvents(bottomLeftCorner, Event.MOUSEEVENTS);
+ // Event.sinkEvents(bottomRightCorner, Event.MOUSEEVENTS);
+ Event.sinkEvents(topEdge, Event.MOUSEEVENTS);
+ Event.sinkEvents(rightEdge, Event.MOUSEEVENTS);
+ Event.sinkEvents(bottomEdge, Event.MOUSEEVENTS);
+ Event.sinkEvents(leftEdge, Event.MOUSEEVENTS);
+ }
+
+ /**
+ * Set the size of the resize locations in pixels. This will be the
+ * width&height for the corner locations, width for the left&right
+ * sides, and height for the top&bottom sides.
+ * <p>
+ * Default size is {@value #DEFAULT_DRAG_SIZE_PIXELS}.
+ *
+ * @param resizeLocationSize the new resize location size
+ */
+ public void setResizeLocationSize(int resizeLocationSize) {
+ if (dragSizePixels != resizeLocationSize) {
+ dragSizePixels = resizeLocationSize;
+ // topLeftCorner.getStyle().setHeight(resizeLocationSize,
+ // Unit.PX);
+ // topLeftCorner.getStyle().setWidth(resizeLocationSize,
+ // Unit.PX);
+ // topRightCorner.getStyle().setHeight(resizeLocationSize,
+ // Unit.PX);
+ // topRightCorner.getStyle().setWidth(resizeLocationSize,
+ // Unit.PX);
+ // bottomLeftCorner.getStyle().setHeight(resizeLocationSize,
+ // Unit.PX);
+ // bottomLeftCorner.getStyle().setWidth(resizeLocationSize,
+ // Unit.PX);
+ // bottomRightCorner.getStyle().setHeight(resizeLocationSize,
+ // Unit.PX);
+ // bottomRightCorner.getStyle().setWidth(resizeLocationSize,
+ // Unit.PX);
+
+ topEdge.getStyle().setHeight(resizeLocationSize, Unit.PX);
+ rightEdge.getStyle().setWidth(resizeLocationSize, Unit.PX);
+ bottomEdge.getStyle().setHeight(resizeLocationSize, Unit.PX);
+ leftEdge.getStyle().setWidth(resizeLocationSize, Unit.PX);
+
+ int negativeMargin = new BigDecimal(resizeLocationSize).divideToIntegralValue(new BigDecimal(2))
+ .negate().intValueExact();
+ // topLeftCorner.getStyle().setMarginLeft(negativeMargin,
+ // Unit.PX);
+ // topRightCorner.getStyle().setMarginRight(negativeMargin,
+ // Unit.PX);
+ // bottomRightCorner.getStyle().setMarginRight(negativeMargin,
+ // Unit.PX);
+ // bottomLeftCorner.getStyle().setMarginLeft(negativeMargin,
+ // Unit.PX);
+ topEdge.getStyle().setMarginTop(negativeMargin, Unit.PX);
+ rightEdge.getStyle().setMarginRight(negativeMargin, Unit.PX);
+ bottomEdge.getStyle().setMarginBottom(negativeMargin, Unit.PX);
+ leftEdge.getStyle().setMarginLeft(negativeMargin, Unit.PX);
+ }
+ }
+
+ /**
+ * Trigger the resizable mode for the component.
+ *
+ * @param resizable the new resizable
+ */
+ public void setResizable(boolean resizable) {
+ if (this.resizable != resizable) {
+ this.resizable = resizable;
+ if (resizable) {
+ enableResize(topEdge);
+ enableResize(leftEdge);
+ enableResize(rightEdge);
+ enableResize(bottomEdge);
+ getElement().addClassName(O_RESIZABLE_STYLE_NAME);
+ } else {
+ disableResize(topEdge);
+ disableResize(leftEdge);
+ disableResize(rightEdge);
+ disableResize(bottomEdge);
+ getElement().removeClassName(O_RESIZABLE_STYLE_NAME);
+ }
+ }
+ }
+
+ /**
+ * Enable resize.
+ *
+ * @param element the element
+ */
+ protected void enableResize(Element element) {
+ getElement().appendChild(element);
+ Event.setEventListener(element, resizeHandler);
+ }
+
+ /**
+ * Disable resize.
+ *
+ * @param element the element
+ */
+ protected void disableResize(Element element) {
+ getElement().removeChild(element);
+ Event.setEventListener(element, null);
+ }
+
+ /**
+ * Is the component in resizable mode.
+ *
+ * @return the resizable
+ */
+ public boolean getResizable() {
+ return resizable;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.VAbsoluteLayout.AbsoluteWrapper#setWrapperStyleNames(java.lang.String[])
+ */
+ public void setWrapperStyleNames(String... stylenames) {
+ List<String> styles = stylenames != null ? new ArrayList<String>(Arrays.asList(stylenames)) : new ArrayList<String>();
+ styles.add(O_RESIZABLE_STYLE_NAME);
+ super.setWrapperStyleNames(styles.toArray(new String[styles.size()]));
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.VAbsoluteLayout.AbsoluteWrapper#destroy()
+ */
+ public void destroy() {
+ setResizable(false);
+
+ super.destroy();
+ }
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentManager.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentManager.java
new file mode 100644
index 0000000..11d10c3
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentManager.java
@@ -0,0 +1,536 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.osbp.vaadin.addons.absolutelayout.client.OAlignmentOverlay.AlignmentsLocation;
+
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ui.dd.VDragEvent;
+
+import fi.jasoft.dragdroplayouts.client.ui.Constants;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This class handles alignments for drag and drop and resize operations.
+ */
+public class OAlignmentManager {
+
+ /** The manager. */
+ private static OAlignmentManager manager;
+
+ /** The alignments. */
+ protected Set<OAlignmentOverlay> alignments = new HashSet<>();
+
+ /** The snap. */
+ protected int snap = 4;
+
+ /** The layout. */
+ private OAbsoluteLayoutWidget layout;
+
+ /** The snap info. */
+ private OAlignmentSnapInfo snapInfo;
+
+ /** The resizing widget. */
+ private OAbsoluteLayoutWidget.ResizableAbsoluteWrapper resizingWidget;
+
+ /** The resizing overlay. */
+ private Element resizingOverlay;
+
+ /** The resize location. */
+ private OResizeLocation resizeLocation;
+
+ /** The use alignments. */
+ private boolean useAlignments;
+
+ /**
+ * Instantiates a new o alignment manager.
+ */
+ private OAlignmentManager() {
+
+ }
+
+ /**
+ * Gets the.
+ *
+ * @return the o alignment manager
+ */
+ public static OAlignmentManager get() {
+ if (manager == null) {
+ manager = new OAlignmentManager();
+ }
+ return manager;
+ }
+
+ /**
+ * Start.
+ *
+ * @param layout the layout
+ */
+ protected void start(OAbsoluteLayoutWidget layout) {
+ this.layout = layout;
+ }
+
+ /**
+ * Start drag and drop.
+ *
+ * @param layout the layout
+ */
+ public void startDragAndDrop(OAbsoluteLayoutWidget layout) {
+ start(layout);
+ }
+
+ /**
+ * Start resize.
+ *
+ * @param layout the layout
+ * @param resizingWidget the resizing widget
+ * @param resizeLocation the resize location
+ * @param resizingOverlay the resizing overlay
+ */
+ public void startResize(OAbsoluteLayoutWidget layout, OAbsoluteLayoutWidget.ResizableAbsoluteWrapper resizingWidget,
+ OResizeLocation resizeLocation, Element resizingOverlay) {
+ this.layout = layout;
+ this.resizingWidget = resizingWidget;
+ this.resizeLocation = resizeLocation;
+ this.resizingOverlay = resizingOverlay;
+
+ start(layout);
+ }
+
+ /**
+ * Checks if is active.
+ *
+ * @return true, if is active
+ */
+ public boolean isActive() {
+ return layout != null;
+ }
+
+ /**
+ * Stop.
+ */
+ public void stop() {
+ resetAlignments();
+ layout = null;
+ alignments.clear();
+ resizeLocation = null;
+ resizingWidget = null;
+ snapInfo = null;
+ }
+
+ /**
+ * Update alignments for drop.
+ *
+ * @param drag the drag
+ */
+ public void updateAlignmentsForDrop(final VDragEvent drag) {
+ if (!useAlignments) {
+ return;
+ }
+
+ Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+ @Override
+ public void execute() {
+ resetSnap();
+ resetAlignments();
+
+ Map<String, Object> dropDetail = drag.getDropDetails();
+ if (!dropDetail.containsKey(Constants.DROP_DETAIL_RELATIVE_TOP)) {
+ return;
+ }
+ int top = (int) dropDetail.get(Constants.DROP_DETAIL_RELATIVE_TOP);
+ int left = (int) dropDetail.get(Constants.DROP_DETAIL_RELATIVE_LEFT);
+ int width = (int) dropDetail.get(Constants.DROP_DETAIL_COMPONENT_WIDTH);
+ int height = (int) dropDetail.get(Constants.DROP_DETAIL_COMPONENT_HEIGHT);
+
+ int topEdgeY = top;
+ int leftEdgeX = left;
+ int rightEdgeX = left + width;
+ int bottomEdgeY = top + height;
+
+ int snapCount = 0;
+ for (Widget child : layout.getChildren()) {
+ int childTop = child.getElement().getOffsetTop();
+ int childLeft = child.getElement().getOffsetLeft();
+ int childWidth = child.getElement().getOffsetWidth();
+ int childHeight = child.getElement().getOffsetHeight();
+
+ int childTopEdgeY = childTop;
+ int childLeftEdgeX = childLeft;
+ int childRightEdgeX = childLeft + childWidth;
+ int childBottomEdgeY = childTop + childHeight;
+
+ boolean isDraggedLeftOf = false;
+ boolean isDraggedToOf = false;
+ if (left < child.getAbsoluteLeft()) {
+ isDraggedLeftOf = true;
+ }
+
+ if (top < child.getAbsoluteTop()) {
+ isDraggedToOf = true;
+ }
+
+ AlignmentsLocation location = null;
+ // paired sides -> left to left,...
+ int top_top_EdgeYDelta = topEdgeY - childTopEdgeY;
+ int bottom_bottom_EdgeYDelta = bottomEdgeY - childBottomEdgeY;
+ int left_left_EdgeXDelta = leftEdgeX - childLeftEdgeX;
+ int right_right_EdgeXDelta = rightEdgeX - childRightEdgeX;
+ int top_bottom_EdgeYDelta = topEdgeY - childBottomEdgeY;
+ int bottom_top_EdgeYDelta = bottomEdgeY - childTopEdgeY;
+ int left_right_EdgeXDelta = leftEdgeX - childRightEdgeX;
+ int right_left_EdgeXDelta = rightEdgeX - childLeftEdgeX;
+
+ OAlignmentSnapInfo snapInfo = null;
+ if (isInsideSnapBounds(top_top_EdgeYDelta)) {
+ snapInfo = new OAlignmentSnapInfo(0, top_top_EdgeYDelta);
+ location = isDraggedLeftOf ? AlignmentsLocation.TOP_EDGE_TOLEFT
+ : AlignmentsLocation.TOP_EDGE_TORIGHT;
+ } else if (isInsideSnapBounds(left_left_EdgeXDelta)) {
+ snapInfo = new OAlignmentSnapInfo(left_left_EdgeXDelta, 0);
+ location = isDraggedToOf ? AlignmentsLocation.LEFT_EDGE_TOTOP
+ : AlignmentsLocation.LEFT_EDGE_TOBOTTOM;
+ } else if (isInsideSnapBounds(right_right_EdgeXDelta)) {
+ snapInfo = new OAlignmentSnapInfo(right_right_EdgeXDelta, 0);
+ location = isDraggedToOf ? AlignmentsLocation.RIGHT_EDGE_TOTOP
+ : AlignmentsLocation.RIGHT_EDGE_TOBOTTOM;
+ } else if (isInsideSnapBounds(bottom_bottom_EdgeYDelta)) {
+ snapInfo = new OAlignmentSnapInfo(0, bottom_bottom_EdgeYDelta);
+ location = isDraggedLeftOf ? AlignmentsLocation.BOTTOM_EDGE_TOLEFT
+ : AlignmentsLocation.BOTTOM_EDGE_TORIGHT;
+ // unpaired sides
+ } else if (isInsideSnapBounds(top_bottom_EdgeYDelta)) {
+ snapInfo = new OAlignmentSnapInfo(0, top_bottom_EdgeYDelta);
+ location = isDraggedLeftOf ? AlignmentsLocation.BOTTOM_EDGE_TOLEFT
+ : AlignmentsLocation.BOTTOM_EDGE_TORIGHT;
+ } else if (isInsideSnapBounds(left_right_EdgeXDelta)) {
+ snapInfo = new OAlignmentSnapInfo(left_right_EdgeXDelta, 0);
+ location = isDraggedToOf ? AlignmentsLocation.RIGHT_EDGE_TOTOP
+ : AlignmentsLocation.RIGHT_EDGE_TOBOTTOM;
+ } else if (isInsideSnapBounds(right_left_EdgeXDelta)) {
+ snapInfo = new OAlignmentSnapInfo(right_left_EdgeXDelta, 0);
+ location = isDraggedToOf ? AlignmentsLocation.LEFT_EDGE_TOTOP
+ : AlignmentsLocation.LEFT_EDGE_TOBOTTOM;
+ } else if (isInsideSnapBounds(bottom_top_EdgeYDelta)) {
+ snapInfo = new OAlignmentSnapInfo(0, bottom_top_EdgeYDelta);
+ location = isDraggedLeftOf ? AlignmentsLocation.TOP_EDGE_TOLEFT
+ : AlignmentsLocation.TOP_EDGE_TORIGHT;
+ }
+
+ if (location != null) {
+ snapCount++;
+
+ if (isFirstSnap(snapCount)) {
+ registerSnap(snapInfo);
+ }
+
+ OAlignmentOverlay overlay = new OAlignmentOverlay(child, drag.getDragImage(), location,
+ snapInfo, false, snapCount == 1);
+ alignments.add(overlay);
+ overlay.show();
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * Update alignments for resize.
+ *
+ * @param draggedElement the resize preview element
+ * @param dragOverlayElement the drag overlay element
+ */
+ public void updateAlignmentsForResize(final Element draggedElement, final Element dragOverlayElement) {
+ if (dragOverlayElement == null || !useAlignments) {
+ return;
+ }
+ Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+ @Override
+ public void execute() {
+ resetSnap();
+ resetAlignments();
+
+ int top = (int) dragOverlayElement.getAbsoluteTop();
+ int left = (int) dragOverlayElement.getAbsoluteLeft();
+ int width = (int) dragOverlayElement.getOffsetWidth();
+ int height = (int) dragOverlayElement.getOffsetHeight();
+
+ int topEdgeY = top;
+ int leftEdgeX = left;
+ int rightEdgeX = left + width;
+ int bottomEdgeY = top + height;
+
+ int snapCount = 0;
+
+ for (Widget child : layout.getChildren()) {
+ if (child == getResizingWidget()) {
+ continue;
+ }
+
+ int childTop = child.getElement().getAbsoluteTop();
+ int childLeft = child.getElement().getAbsoluteLeft();
+ int childWidth = child.getElement().getOffsetWidth();
+ int childHeight = child.getElement().getOffsetHeight();
+
+ int childTopEdgeY = childTop;
+ int childLeftEdgeX = childLeft;
+ int childRightEdgeX = childLeft + childWidth;
+ int childBottomEdgeY = childTop + childHeight;
+
+ boolean isDraggedLeftOf = false;
+ boolean isDraggedToOf = false;
+ if (left < child.getAbsoluteLeft()) {
+ isDraggedLeftOf = true;
+ }
+
+ if (top < child.getAbsoluteTop()) {
+ isDraggedToOf = true;
+ }
+
+ AlignmentsLocation location = null;
+ // paired sides -> left to left,...
+ int top_top_EdgeYDelta = topEdgeY - childTopEdgeY;
+ int bottom_bottom_EdgeYDelta = bottomEdgeY - childBottomEdgeY;
+ int left_left_EdgeXDelta = leftEdgeX - childLeftEdgeX;
+ int right_right_EdgeXDelta = rightEdgeX - childRightEdgeX;
+ int top_bottom_EdgeYDelta = topEdgeY - childBottomEdgeY;
+ int bottom_top_EdgeYDelta = bottomEdgeY - childTopEdgeY;
+ int left_right_EdgeXDelta = leftEdgeX - childRightEdgeX;
+ int right_left_EdgeXDelta = rightEdgeX - childLeftEdgeX;
+
+ OAlignmentSnapInfo snapInfo = null;
+ OResizeLocation resizeLoc = getResizeLocation();
+ if (resizeLoc.isTop() && isInsideSnapBounds(top_top_EdgeYDelta)) {
+ snapInfo = new OAlignmentSnapInfo(0, top_top_EdgeYDelta, resizeLoc);
+ location = isDraggedLeftOf ? AlignmentsLocation.TOP_EDGE_TOLEFT
+ : AlignmentsLocation.TOP_EDGE_TORIGHT;
+ } else if (resizeLoc.isLeft() && isInsideSnapBounds(left_left_EdgeXDelta)) {
+ snapInfo = new OAlignmentSnapInfo(left_left_EdgeXDelta, 0, resizeLoc);
+ location = isDraggedToOf ? AlignmentsLocation.LEFT_EDGE_TOTOP
+ : AlignmentsLocation.LEFT_EDGE_TOBOTTOM;
+ } else if (resizeLoc.isRight() && isInsideSnapBounds(right_right_EdgeXDelta)) {
+ snapInfo = new OAlignmentSnapInfo(right_right_EdgeXDelta, 0, resizeLoc);
+ location = isDraggedToOf ? AlignmentsLocation.RIGHT_EDGE_TOTOP
+ : AlignmentsLocation.RIGHT_EDGE_TOBOTTOM;
+ } else if (resizeLoc.isBottom() && isInsideSnapBounds(bottom_bottom_EdgeYDelta)) {
+ snapInfo = new OAlignmentSnapInfo(0, bottom_bottom_EdgeYDelta, resizeLoc);
+ location = isDraggedLeftOf ? AlignmentsLocation.BOTTOM_EDGE_TOLEFT
+ : AlignmentsLocation.BOTTOM_EDGE_TORIGHT;
+ // unpaired sides
+ } else if (resizeLoc.isTop() && isInsideSnapBounds(top_bottom_EdgeYDelta)) {
+ snapInfo = new OAlignmentSnapInfo(0, top_bottom_EdgeYDelta, resizeLoc);
+ location = isDraggedLeftOf ? AlignmentsLocation.BOTTOM_EDGE_TOLEFT
+ : AlignmentsLocation.BOTTOM_EDGE_TORIGHT;
+ } else if (resizeLoc.isLeft() && isInsideSnapBounds(left_right_EdgeXDelta)) {
+ snapInfo = new OAlignmentSnapInfo(left_right_EdgeXDelta, 0, resizeLoc);
+ location = isDraggedToOf ? AlignmentsLocation.RIGHT_EDGE_TOTOP
+ : AlignmentsLocation.RIGHT_EDGE_TOBOTTOM;
+ } else if (resizeLoc.isRight() && isInsideSnapBounds(right_left_EdgeXDelta)) {
+ snapInfo = new OAlignmentSnapInfo(right_left_EdgeXDelta, 0, resizeLoc);
+ location = isDraggedToOf ? AlignmentsLocation.LEFT_EDGE_TOTOP
+ : AlignmentsLocation.LEFT_EDGE_TOBOTTOM;
+ } else if (resizeLoc.isBottom() && isInsideSnapBounds(bottom_top_EdgeYDelta)) {
+ snapInfo = new OAlignmentSnapInfo(0, bottom_top_EdgeYDelta, resizeLoc);
+ location = isDraggedLeftOf ? AlignmentsLocation.TOP_EDGE_TOLEFT
+ : AlignmentsLocation.TOP_EDGE_TORIGHT;
+ }
+
+ if (location != null) {
+ snapCount++;
+
+ if (isFirstSnap(snapCount)) {
+ registerSnap(snapInfo);
+ }
+
+ OAlignmentOverlay overlay = new OAlignmentOverlay(child, dragOverlayElement, location, snapInfo,
+ true, isFirstSnap(snapCount));
+ alignments.add(overlay);
+ overlay.show();
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * Checks if is first snap.
+ *
+ * @param snapCount the snap count
+ * @return true, if is first snap
+ */
+ private boolean isFirstSnap(int snapCount) {
+ return snapCount == 1;
+ }
+
+ /**
+ * Resets all alignments.
+ */
+ protected void resetAlignments() {
+ for (OAlignmentOverlay alignment : alignments) {
+ alignment.hide();
+ }
+ alignments.clear();
+ }
+
+ /**
+ * Checks if is inside snap bounds.
+ *
+ * @param value the value
+ * @return true, if is inside snap bounds
+ */
+ protected boolean isInsideSnapBounds(int value) {
+ int snap = getSnapFromCSS();
+ return value <= snap && value >= -snap;
+ }
+
+ /**
+ * Reads the snap in pixels from the elements style.
+ *
+ * @return the snap from css
+ */
+ protected int getSnapFromCSS() {
+ String snapStr = layout.getElement().getStyle().getProperty(IOConstants.CSS_SNAP_PROPERTY);
+ if (snapStr != null) {
+ return Integer.valueOf(snapStr);
+ } else {
+ return snap;
+ }
+ }
+
+ /**
+ * Registers the current snap. Only one snap definition can be active at a
+ * time.
+ *
+ * @param snapInfo the snap info
+ */
+ protected void registerSnap(OAlignmentSnapInfo snapInfo) {
+ this.snapInfo = snapInfo;
+ }
+
+ /**
+ * Resets the snap info.
+ */
+ protected void resetSnap() {
+ this.snapInfo = null;
+ }
+
+ /**
+ * Gets the snap.
+ *
+ * @return the snap
+ */
+ protected OAlignmentSnapInfo getSnap() {
+ return snapInfo != null ? snapInfo : new OAlignmentSnapInfo(0, 0);
+ }
+
+ /**
+ * Updates the dropDetails after drop event.
+ *
+ * @param drag the drag
+ */
+ public void updateDropDetails(VDragEvent drag) {
+ if (snapInfo != null) {
+ Map<String, Object> dropDetail = drag.getDropDetails();
+ int rTop = (int) dropDetail.get(Constants.DROP_DETAIL_RELATIVE_TOP);
+ int aTop = (int) dropDetail.get(Constants.DROP_DETAIL_ABSOLUTE_TOP);
+ int rLeft = (int) dropDetail.get(Constants.DROP_DETAIL_RELATIVE_LEFT);
+ int aLeft = (int) dropDetail.get(Constants.DROP_DETAIL_ABSOLUTE_LEFT);
+
+ rTop -= snapInfo.getY();
+ aTop -= snapInfo.getY();
+ rLeft -= snapInfo.getX();
+ aLeft -= snapInfo.getX();
+
+ dropDetail.put(Constants.DROP_DETAIL_RELATIVE_TOP, rTop);
+ dropDetail.put(Constants.DROP_DETAIL_ABSOLUTE_TOP, aTop);
+ dropDetail.put(Constants.DROP_DETAIL_RELATIVE_LEFT, rLeft);
+ dropDetail.put(Constants.DROP_DETAIL_ABSOLUTE_LEFT, aLeft);
+ }
+ }
+
+ /**
+ * Updates the resized widget after the resizing was finished.
+ *
+ * @param accept the accept
+ * @param oldWidth the old width
+ * @param oldHeight the old height
+ */
+ public void updateResizedWidget(boolean accept, int oldWidth, int oldHeight) {
+ if (accept) {
+ int width = resizingOverlay.getOffsetWidth();
+ int height = resizingOverlay.getOffsetHeight();
+
+ resizingWidget.getElement().getStyle().setWidth(width, Unit.PX);
+ resizingWidget.getElement().getStyle().setHeight(height, Unit.PX);
+
+ resizingWidget.notifyResized(width, height, oldWidth, oldHeight, resizeLocation);
+ } else {
+ resizingWidget.notifyResizingCancel();
+ }
+ }
+
+ /**
+ * Returns the widget that is currently resized.
+ *
+ * @return the resizing widget
+ */
+ public Widget getResizingWidget() {
+ return resizingWidget;
+ }
+
+ /**
+ * Returns the resizing operation currently performed.
+ *
+ * @return the resize location
+ */
+ public OResizeLocation getResizeLocation() {
+ return resizeLocation;
+ }
+
+ /**
+ * Returns true, if alignments should be used.
+ *
+ * @return true, if is use alignments
+ */
+ public boolean isUseAlignments() {
+ return useAlignments;
+ }
+
+ /**
+ * Sets the use alignments.
+ *
+ * @param useAlignments the new use alignments
+ */
+ public void setUseAlignments(boolean useAlignments) {
+ // if alignments switched off, ensure that pending alignments are being
+ // removed.
+ if (this.useAlignments == true && useAlignments == false) {
+ Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+ @Override
+ public void execute() {
+ resetSnap();
+ resetAlignments();
+ }
+ });
+ }
+ this.useAlignments = useAlignments;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentOverlay.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentOverlay.java
new file mode 100644
index 0000000..014c996
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentOverlay.java
@@ -0,0 +1,306 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ui.VOverlay;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OAlignmentOverlay.
+ */
+public class OAlignmentOverlay extends VOverlay {
+
+ /** The Constant THICKNESS. */
+ private static final int THICKNESS = 1;
+
+ /** The Constant CLASSNAME. */
+ private static final String CLASSNAME = "o-alignmentLine";
+
+ /** The alignment location. */
+ private final AlignmentsLocation alignmentLocation;
+
+ /** The drag element. */
+ private final Element dragElement;
+
+ /** The snap timer. */
+ private Timer snapTimer;
+
+ /**
+ * Shows alignment lines for drag and resize operations.
+ *
+ * @param owner the owner
+ * @param dragElement the drag element
+ * @param location the location
+ * @param snap the snap
+ * @param resize the resize
+ * @param autoSnap the auto snap
+ */
+ public OAlignmentOverlay(Widget owner, final Element dragElement, AlignmentsLocation location,
+ final OAlignmentSnapInfo snap, final boolean resize, boolean autoSnap) {
+ super(false, false);
+
+ super.setOwner(owner);
+ this.dragElement = dragElement;
+ this.alignmentLocation = location;
+
+ setStyleName(CLASSNAME);
+
+ setZIndex(VOverlay.Z_INDEX + 1);
+
+ if (autoSnap && (snap.getX() != 0 || snap.getY() != 0)) {
+ snapTimer = new Timer() {
+ @Override
+ public void run() {
+ if (resize) {
+ snapResizeImagePosition(dragElement, snap);
+ } else {
+ snapDragImagePosition(dragElement, snap);
+ }
+ }
+ };
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.VOverlay#show()
+ */
+ @Override
+ public void show() {
+ int left = 0;
+ int top = 0;
+ int width = 0;
+ int height = 0;
+
+ if (alignmentLocation == null) {
+ return;
+ }
+
+ switch (alignmentLocation) {
+ case TOP_EDGE_TOLEFT:
+ width = getAlignmentLineX();
+ left = getOwner().getOffsetWidth() - width;
+ height = THICKNESS;
+ break;
+ case TOP_EDGE_TORIGHT:
+ width = getAlignmentLineX();
+ left = 0;
+ height = THICKNESS;
+ break;
+ case BOTTOM_EDGE_TOLEFT:
+ top = getOwner().getOffsetHeight();
+ width = getAlignmentLineX();
+ left = getOwner().getOffsetWidth() - width;
+ height = THICKNESS;
+ break;
+ case BOTTOM_EDGE_TORIGHT:
+ width = getAlignmentLineX();
+ left = 0;
+ top = getOwner().getOffsetHeight();
+ height = THICKNESS;
+ break;
+ case LEFT_EDGE_TOBOTTOM:
+ top = 0;
+ width = THICKNESS;
+ height = getAlignmentLineY();
+ break;
+ case LEFT_EDGE_TOTOP:
+ top = getOwner().getOffsetHeight() - getAlignmentLineY();
+ width = THICKNESS;
+ height = getAlignmentLineY();
+ break;
+ case RIGHT_EDGE_TOBOTTOM:
+ top = 0;
+ left = getOwner().getOffsetWidth();
+ width = THICKNESS;
+ height = getAlignmentLineY();
+ break;
+ case RIGHT_EDGE_TOTOP:
+ top = getOwner().getOffsetHeight() - getAlignmentLineY();
+ left = getOwner().getOffsetWidth();
+ width = THICKNESS;
+ height = getAlignmentLineY();
+ break;
+ }
+
+ // set adjustment size
+ Element element = getContainerElement();
+ element.getStyle().setWidth(width, Unit.PX);
+ element.getStyle().setHeight(height, Unit.PX);
+ String bg = element.getStyle().getBackgroundColor();
+ if (bg == null || bg.equals("")) {
+ element.getStyle().setBackgroundColor("red");
+ }
+
+ // set the popup position
+ int absoluteLeft = getOwner().getAbsoluteLeft() + left;
+ int absoluteTop = getOwner().getAbsoluteTop() + top;
+ setPopupPosition(absoluteLeft, absoluteTop);
+
+ super.show();
+
+ if (snapTimer != null) {
+ snapTimer.schedule(300);
+ }
+ }
+
+ /**
+ * Calculates the horizontal alignment line.
+ *
+ * @return the alignment line x
+ */
+ private int getAlignmentLineX() {
+ if (isOwnerLeftOfImage()) {
+ return dragElement.getAbsoluteLeft() - getOwner().getAbsoluteLeft() + +dragElement.getOffsetWidth();
+ } else {
+ return getOwner().getAbsoluteLeft() - dragElement.getAbsoluteLeft() + getOwner().getOffsetWidth();
+ }
+ }
+
+ /**
+ * Checks if is owner left of image.
+ *
+ * @return true, if is owner left of image
+ */
+ private boolean isOwnerLeftOfImage() {
+ return getOwner().getAbsoluteLeft() < dragElement.getAbsoluteLeft();
+ }
+
+ /**
+ * Calculates the vertical alignment line.
+ *
+ * @return the alignment line y
+ */
+ private int getAlignmentLineY() {
+ if (isOwnerTopOfImage()) {
+ return dragElement.getAbsoluteTop() - getOwner().getAbsoluteTop() + dragElement.getOffsetHeight();
+ } else {
+ return getOwner().getAbsoluteTop() - dragElement.getAbsoluteTop() + getOwner().getOffsetHeight();
+ }
+ }
+
+ /**
+ * Checks if is owner top of image.
+ *
+ * @return true, if is owner top of image
+ */
+ private boolean isOwnerTopOfImage() {
+ return getOwner().getAbsoluteTop() < dragElement.getAbsoluteTop();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.VOverlay#hide()
+ */
+ @Override
+ public void hide() {
+ if (snapTimer != null) {
+ snapTimer.cancel();
+ }
+
+ super.hide();
+ }
+
+ /**
+ * Snap drag image position.
+ *
+ * @param dragImage the drag image
+ * @param snap the snap
+ */
+ private void snapDragImagePosition(final Element dragImage, final OAlignmentSnapInfo snap) {
+ int offsetTop = 0;
+ try {
+ String offsetTopStr = dragImage.getStyle().getMarginTop();
+ offsetTop = Integer.parseInt(offsetTopStr.substring(0, offsetTopStr.length() - 2));
+ } catch (NumberFormatException e) {
+ // nothing to do
+ }
+ dragImage.getStyle().setTop(dragImage.getAbsoluteTop() - offsetTop - snap.getY(), Unit.PX);
+
+ int offsetLeft = 0;
+ try {
+ String offsetLeftStr = dragImage.getStyle().getMarginLeft();
+ offsetLeft = Integer.parseInt(offsetLeftStr.substring(0, offsetLeftStr.length() - 2));
+ } catch (NumberFormatException e) {
+ // nothing to do
+ }
+ dragImage.getStyle().setLeft(dragImage.getAbsoluteLeft() - offsetLeft - snap.getX(), Unit.PX);
+ }
+
+ /**
+ * Snap resize image position.
+ *
+ * @param dragImage the drag image
+ * @param delta the delta
+ */
+ private void snapResizeImagePosition(final Element dragImage, final OAlignmentSnapInfo delta) {
+
+ OResizeLocation location = OAlignmentManager.get().getResizeLocation();
+ int oldWidth = dragImage.getOffsetWidth();
+ int oldHeigth = dragImage.getOffsetHeight();
+
+ int newWidth = 0;
+ int newHeight = 0;
+
+ switch (location) {
+ case TOP:
+ case TOP_LEFT:
+ case LEFT:
+ newHeight = oldHeigth + delta.getY();
+ newWidth = oldWidth + delta.getX();
+ break;
+ case BOTTOM:
+ case BOTTOM_RIGHT:
+ case RIGHT:
+ newHeight = oldHeigth - delta.getY();
+ newWidth = oldWidth - delta.getX();
+ break;
+ case TOP_RIGHT:
+ newHeight = oldHeigth + delta.getY();
+ newWidth = oldWidth - delta.getX();
+ break;
+ case BOTTOM_LEFT:
+ newHeight = oldHeigth - delta.getY();
+ newWidth = oldWidth + delta.getX();
+ break;
+ }
+
+ dragImage.getStyle().setWidth(newWidth, Unit.PX);
+ dragImage.getStyle().setHeight(newHeight, Unit.PX);
+ }
+
+ /**
+ * Indicates where the alignments should be painted.
+ */
+ public enum AlignmentsLocation {
+
+ /** The top edge toleft. */
+ TOP_EDGE_TOLEFT,
+ /** The top edge toright. */
+ TOP_EDGE_TORIGHT,
+ /** The left edge totop. */
+ LEFT_EDGE_TOTOP,
+ /** The left edge tobottom. */
+ LEFT_EDGE_TOBOTTOM,
+ /** The bottom edge toleft. */
+ BOTTOM_EDGE_TOLEFT,
+ /** The bottom edge toright. */
+ BOTTOM_EDGE_TORIGHT,
+ /** The right edge totop. */
+ RIGHT_EDGE_TOTOP,
+ /** The right edge tobottom. */
+ RIGHT_EDGE_TOBOTTOM
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentSnapInfo.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentSnapInfo.java
new file mode 100644
index 0000000..3f8668e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentSnapInfo.java
@@ -0,0 +1,89 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Defines the x and y pixel to the next snapping position. Location defines the
+ * type of resizing operation done.
+ */
+public class OAlignmentSnapInfo {
+
+ /** The x. */
+ private final int x;
+
+ /** The y. */
+ private final int y;
+
+ /** The location. */
+ private final OResizeLocation location;
+
+ /**
+ * Instantiates a new o alignment snap info.
+ *
+ * @param x the x
+ * @param y the y
+ */
+ public OAlignmentSnapInfo(int x, int y) {
+ super();
+ this.x = x;
+ this.y = y;
+ this.location = null;
+ }
+
+ /**
+ * Instantiates a new o alignment snap info.
+ *
+ * @param x the x
+ * @param y the y
+ * @param location the location
+ */
+ public OAlignmentSnapInfo(int x, int y, OResizeLocation location) {
+ super();
+ this.x = x;
+ this.y = y;
+ this.location = location;
+ }
+
+ /**
+ * X value is delta from dragElement - absoluteLayout#child. A negative
+ * value means, that the dragged element is more left (left is smaller) then
+ * the child from absolute layout.
+ *
+ * @return the x
+ */
+ public int getX() {
+ return x;
+ }
+
+ /**
+ * Y value is delta from dragElement - absoluteLayout#child. A negative
+ * value means, that the dragged element is more top (top is smaller) then
+ * the child from absolute layout.
+ *
+ * @return the y
+ */
+ public int getY() {
+ return y;
+ }
+
+ /**
+ * Gets the location.
+ *
+ * @return the location
+ */
+ public OResizeLocation getLocation() {
+ return location;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OChildResizeListener.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OChildResizeListener.java
new file mode 100644
index 0000000..0e86dd6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OChildResizeListener.java
@@ -0,0 +1,37 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import com.vaadin.shared.Connector;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Listener that is notified, if the resize operation proceeded.
+ *
+ * see OChildResizeEvent
+ */
+public interface OChildResizeListener {
+
+ /**
+ * Is called if the resize operation proceeded.
+ *
+ * @param child the child
+ * @param newWidth the new width
+ * @param newHeight the new height
+ * @param oldWidth the old width
+ * @param oldHeight the old height
+ * @param location the location
+ */
+ void resized(Connector child, int newWidth, int newHeight, int oldWidth, int oldHeight, OResizeLocation location);
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OResizeLocation.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OResizeLocation.java
new file mode 100644
index 0000000..49b0c44
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OResizeLocation.java
@@ -0,0 +1,92 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Enum OResizeLocation.
+ */
+public enum OResizeLocation {
+
+ /** The top left. */
+ TOP_LEFT,
+ /** The top. */
+ TOP,
+ /** The top right. */
+ TOP_RIGHT,
+ /** The right. */
+ RIGHT,
+ /** The bottom right. */
+ BOTTOM_RIGHT,
+ /** The bottom. */
+ BOTTOM,
+ /** The bottom left. */
+ BOTTOM_LEFT,
+ /** The left. */
+ LEFT;
+
+ /**
+ * Checks if is top.
+ *
+ * @return true, if is top
+ */
+ public boolean isTop(){
+ return this == OResizeLocation.TOP_LEFT || this == OResizeLocation.TOP || this == OResizeLocation.TOP_RIGHT;
+ }
+
+ /**
+ * Checks if is bottom.
+ *
+ * @return true, if is bottom
+ */
+ public boolean isBottom(){
+ return this == OResizeLocation.BOTTOM_LEFT || this == OResizeLocation.BOTTOM || this == OResizeLocation.BOTTOM_RIGHT;
+ }
+
+ /**
+ * Checks if is left.
+ *
+ * @return true, if is left
+ */
+ public boolean isLeft(){
+ return this == OResizeLocation.TOP_LEFT || this == OResizeLocation.LEFT || this == OResizeLocation.BOTTOM_LEFT;
+ }
+
+ /**
+ * Checks if is right.
+ *
+ * @return true, if is right
+ */
+ public boolean isRight(){
+ return this == OResizeLocation.TOP_RIGHT || this == OResizeLocation.RIGHT || this == OResizeLocation.BOTTOM_RIGHT;
+ }
+
+ /**
+ * Checks if is y.
+ *
+ * @return true, if is y
+ */
+ public boolean isY(){
+ return isTop() || isBottom();
+ }
+
+ /**
+ * Checks if is x.
+ *
+ * @return true, if is x
+ */
+ public boolean isX(){
+ return isLeft() || isRight();
+ }
+}
+
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/public/oabsolutelayout/styles.css b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/public/oabsolutelayout/styles.css
new file mode 100644
index 0000000..5fd286f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/public/oabsolutelayout/styles.css
@@ -0,0 +1,66 @@
+
+ .v-absolutelayout .o-alignmentLine {
+ // the color of the alignment line
+ background-color: green;
+ }
+
+ .o-absolutelayout{
+ // the amount of pixels, a snap to alignment lines is done
+ snap: 7;
+ }
+
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .resizing {
+ overflow: visible;
+ }
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .drag-overlay {
+ border: 1px solid red;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: absolute;
+ z-index: 10;
+ }
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .tlc,
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .te,
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .trc,
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .re,
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .brc,
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .be,
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .blc,
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .le {
+ background-color: transparent;
+ display: block;
+ overflow: visible;
+ position: absolute;
+ }
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .div.unused {
+ cursor: default !important;
+ }
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .te {
+ cursor: ns-resize;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 6;
+ }
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .re {
+ cursor: ew-resize;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 5;
+ }
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .le {
+ cursor: ew-resize;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 5;
+ }
+ .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .be {
+ cursor: ns-resize;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 6;
+ }
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/test/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutTest.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/test/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutTest.java
new file mode 100644
index 0000000..602d9d2
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/test/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutTest.java
@@ -0,0 +1,99 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+ package org.eclipse.osbp.vaadin.addons.absolutelayout;
+
+import com.vaadin.testbench.ScreenshotOnFailureRule;
+import com.vaadin.testbench.TestBenchTestCase;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.LabelElement;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openqa.selenium.firefox.FirefoxDriver;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * This class contains JUnit tests, which are run using Vaadin TestBench 4.
+ *
+ * To run this, first get an evaluation license from
+ * https://vaadin.com/addon/vaadin-testbench and follow the instructions at
+ * https://vaadin.com/directory/help/installing-cval-license to install it.
+ *
+ * Once the license is installed, you can run this class as a JUnit test.
+ */
+public class AbsoluteLayoutTest extends TestBenchTestCase {
+ @Rule
+ public ScreenshotOnFailureRule screenshotOnFailureRule =
+ new ScreenshotOnFailureRule(this, true);
+
+ @Before
+ public void setUp() throws Exception {
+ setDriver(new FirefoxDriver()); // Firefox
+
+ // To use Chrome, first install chromedriver.exe from
+ // http://chromedriver.storage.googleapis.com/index.html
+ // on your system path (e.g. C:\Windows\System32\)
+ // setDriver(new ChromeDriver()); // Chrome
+
+ // To use Internet Explorer, first install iedriverserver.exe from
+ // http://selenium-release.storage.googleapis.com/index.html?path=2.43/
+ // on your system path (e.g. C:\Windows\System32\)
+ // setDriver(new InternetExplorerDriver()); // IE
+
+ // To test headlessly (without a browser), first install phantomjs.exe
+ // from http://phantomjs.org/download.html on your system path
+ // (e.g. C:\Windows\System32\)
+ // setDriver(new PhantomJSDriver()); // PhantomJS headless browser
+ }
+
+ /**
+ * Opens the URL where the application is deployed.
+ */
+ private void openTestUrl() {
+ getDriver().get("http://localhost:8080/org.eclipse.osbp.vaadin.addons.absolutelayout");
+ }
+
+ @Test
+ public void testClickButton() throws Exception {
+ openTestUrl();
+
+ // At first there should be no labels
+ assertFalse($(LabelElement.class).exists());
+
+ // Click the button
+ ButtonElement clickMeButton = $(ButtonElement.class).
+ caption("Click Me").first();
+ clickMeButton.click();
+
+ // There should now be one label
+ assertEquals(1, $(LabelElement.class).all().size());
+ // ... with the specified text
+ assertEquals("Thank you for clicking",
+ $(LabelElement.class).first().getText());
+
+ // Click the button again
+ clickMeButton.click();
+
+ // There should now be two labels
+ List<LabelElement> allLabels = $(LabelElement.class).all();
+ assertEquals(2, allLabels.size());
+ // ... and the last label should have the correct text
+ LabelElement lastLabel = allLabels.get(1);
+ assertEquals("Thank you for clicking", lastLabel.getText());
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/.designer/designer-theme.css b/org.eclipse.osbp.vaadin.addons.designer.overlay/.designer/designer-theme.css
new file mode 100644
index 0000000..3aa7ca1
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/.designer/designer-theme.css
@@ -0,0 +1,12934 @@
+/**
+ * Checks if a list contains a certain value.
+ *
+ * @param {list} $list - the list to check
+ * @param {value} $var - the value to search for
+ * @param {bool} $recursive (false) - should any contained lists be checked for the value
+ *
+ * @return {bool} true if the value is found from the list, false otherwise
+ *
+ * @group lists
+ */
+
+/**
+ * Cross-browser opacity.
+ *
+ * @param {number} $value - opacity value from 0 to 1
+ * @param {bool} $important (false) - should the property value be declared with !important
+ *
+ * @group util
+ */
+
+@-webkit-keyframes valo-animate-in-fade {
+ 0% {
+ opacity: 0;
+ }
+ }
+
+@-moz-keyframes valo-animate-in-fade {
+ 0% {
+ opacity: 0;
+ }
+ }
+
+@keyframes valo-animate-in-fade {
+ 0% {
+ opacity: 0;
+ }
+ }
+
+@-webkit-keyframes valo-animate-out-fade {
+ 100% {
+ opacity: 0;
+ }
+ }
+
+@-moz-keyframes valo-animate-out-fade {
+ 100% {
+ opacity: 0;
+ }
+ }
+
+@keyframes valo-animate-out-fade {
+ 100% {
+ opacity: 0;
+ }
+ }
+
+@-webkit-keyframes valo-animate-in-slide-down {
+ 0% {
+ -webkit-transform: translateY(-100%);
+ }
+ }
+
+@-moz-keyframes valo-animate-in-slide-down {
+ 0% {
+ -moz-transform: translateY(-100%);
+ }
+ }
+
+@keyframes valo-animate-in-slide-down {
+ 0% {
+ -webkit-transform: translateY(-100%);
+ -moz-transform: translateY(-100%);
+ -ms-transform: translateY(-100%);
+ -o-transform: translateY(-100%);
+ transform: translateY(-100%);
+ }
+ }
+
+@-webkit-keyframes valo-animate-in-slide-up {
+ 0% {
+ -webkit-transform: translateY(100%);
+ }
+ }
+
+@-moz-keyframes valo-animate-in-slide-up {
+ 0% {
+ -moz-transform: translateY(100%);
+ }
+ }
+
+@keyframes valo-animate-in-slide-up {
+ 0% {
+ -webkit-transform: translateY(100%);
+ -moz-transform: translateY(100%);
+ -ms-transform: translateY(100%);
+ -o-transform: translateY(100%);
+ transform: translateY(100%);
+ }
+ }
+
+@-webkit-keyframes valo-animate-in-slide-left {
+ 0% {
+ -webkit-transform: translateX(100%);
+ }
+ }
+
+@-moz-keyframes valo-animate-in-slide-left {
+ 0% {
+ -moz-transform: translateX(100%);
+ }
+ }
+
+@keyframes valo-animate-in-slide-left {
+ 0% {
+ -webkit-transform: translateX(100%);
+ -moz-transform: translateX(100%);
+ -ms-transform: translateX(100%);
+ -o-transform: translateX(100%);
+ transform: translateX(100%);
+ }
+ }
+
+@-webkit-keyframes valo-animate-in-slide-right {
+ 0% {
+ -webkit-transform: translateX(-100%);
+ }
+ }
+
+@-moz-keyframes valo-animate-in-slide-right {
+ 0% {
+ -moz-transform: translateX(-100%);
+ }
+ }
+
+@keyframes valo-animate-in-slide-right {
+ 0% {
+ -webkit-transform: translateX(-100%);
+ -moz-transform: translateX(-100%);
+ -ms-transform: translateX(-100%);
+ -o-transform: translateX(-100%);
+ transform: translateX(-100%);
+ }
+ }
+
+@-webkit-keyframes valo-animate-out-slide-down {
+ 100% {
+ -webkit-transform: translateY(100%);
+ }
+ }
+
+@-moz-keyframes valo-animate-out-slide-down {
+ 100% {
+ -moz-transform: translateY(100%);
+ }
+ }
+
+@keyframes valo-animate-out-slide-down {
+ 100% {
+ -webkit-transform: translateY(100%);
+ -moz-transform: translateY(100%);
+ -ms-transform: translateY(100%);
+ -o-transform: translateY(100%);
+ transform: translateY(100%);
+ }
+ }
+
+@-webkit-keyframes valo-animate-out-slide-up {
+ 100% {
+ -webkit-transform: translateY(-100%);
+ }
+ }
+
+@-moz-keyframes valo-animate-out-slide-up {
+ 100% {
+ -moz-transform: translateY(-100%);
+ }
+ }
+
+@keyframes valo-animate-out-slide-up {
+ 100% {
+ -webkit-transform: translateY(-100%);
+ -moz-transform: translateY(-100%);
+ -ms-transform: translateY(-100%);
+ -o-transform: translateY(-100%);
+ transform: translateY(-100%);
+ }
+ }
+
+@-webkit-keyframes valo-animate-out-slide-left {
+ 100% {
+ -webkit-transform: translateX(-100%);
+ }
+ }
+
+@-moz-keyframes valo-animate-out-slide-left {
+ 100% {
+ -moz-transform: translateX(-100%);
+ }
+ }
+
+@keyframes valo-animate-out-slide-left {
+ 100% {
+ -webkit-transform: translateX(-100%);
+ -moz-transform: translateX(-100%);
+ -ms-transform: translateX(-100%);
+ -o-transform: translateX(-100%);
+ transform: translateX(-100%);
+ }
+ }
+
+@-webkit-keyframes valo-animate-out-slide-right {
+ 100% {
+ -webkit-transform: translateX(100%);
+ }
+ }
+
+@-moz-keyframes valo-animate-out-slide-right {
+ 100% {
+ -moz-transform: translateX(100%);
+ }
+ }
+
+@keyframes valo-animate-out-slide-right {
+ 100% {
+ -webkit-transform: translateX(100%);
+ -moz-transform: translateX(100%);
+ -ms-transform: translateX(100%);
+ -o-transform: translateX(100%);
+ transform: translateX(100%);
+ }
+ }
+
+@-webkit-keyframes valo-overlay-animate-in {
+ 0% {
+ -webkit-transform: translatey(-4px);
+ opacity: 0;
+ }
+ }
+
+@-moz-keyframes valo-overlay-animate-in {
+ 0% {
+ -moz-transform: translatey(-4px);
+ opacity: 0;
+ }
+ }
+
+@keyframes valo-overlay-animate-in {
+ 0% {
+ -webkit-transform: translatey(-4px);
+ -moz-transform: translatey(-4px);
+ -ms-transform: translatey(-4px);
+ -o-transform: translatey(-4px);
+ transform: translatey(-4px);
+ opacity: 0;
+ }
+ }
+
+@-webkit-keyframes valo-animate-out-slide-down-fade {
+ 100% {
+ opacity: 0;
+ -webkit-transform: translatey(30%);
+ }
+ }
+
+@-moz-keyframes valo-animate-out-slide-down-fade {
+ 100% {
+ opacity: 0;
+ -moz-transform: translatey(30%);
+ }
+ }
+
+@keyframes valo-animate-out-slide-down-fade {
+ 100% {
+ opacity: 0;
+ -webkit-transform: translatey(30%);
+ -moz-transform: translatey(30%);
+ -ms-transform: translatey(30%);
+ -o-transform: translatey(30%);
+ transform: translatey(30%);
+ }
+ }
+
+/**
+ * Outputs cross-browser Valo-specific linear gradient background-image declarations.
+ *
+ * @group style
+ *
+ * @param {color} $color ($v-background-color) - The base color for the gradient color stops
+ * @param {list} $gradient ($v-gradient) - Valo-specific gradient value. See the documentation for $v-gradient.
+ * @param {color} $fallback (null) - A fallback color for browser which do not support linear gradients (IE8 and IE9 in particular). If null, the base $color is used instead.
+ * @param {string} $direction (to bottom) - the direction of the linear gradient. The color stops are by default so that a lighter shade is at the start and a darker shade is at the end.
+ */
+
+/**
+ * Computes a CSS border property value for the given base color.
+ *
+ * @group style
+ *
+ * @param {list} $border ($v-border) - CSS border value which can contain any of the color keywords
+ * @param {color} $color ($v-background-color) - the base color to which the color keywords are applied to
+ * @param {color} $context (null) - context/surrounding color where the border is expected to appear. The color of the final border is the darker of the two parameters passed to this function.
+ * @param {number} $strength (1) - adjustment for the border contrast
+ *
+ * @return {list} The input $border value with any color keyword replaced with the corresponding actual color
+ */
+
+/**
+ * Ouput selectors and properties to vertically center elements inside their parent.
+ *
+ * @param {string} $to-align (()) - The selector to match the elements which you wish to align vertically. The targeted elements should be inline or inline-block elements.
+ * @param {string} $align (middle) - The vertical-align value, e.g. top, middle, bottom
+ * @param {string} $pseudo-element (after) - Which pseudo element to use for the vertical align guide
+ *
+ * @group util
+ */
+
+@font-face {
+ font-family: ThemeIcons;
+ font-weight: normal;
+ font-style: normal;
+ src: url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.eot);
+ src: url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.woff) format("woff"), url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.ttf) format("truetype"), url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.svg#ThemeIcons) format("svg");
+}
+
+.ThemeIcons {
+ font-family: ThemeIcons;
+ font-style: normal;
+ font-weight: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ display: inline-block;
+ text-align: center;
+}
+
+@font-face {
+ font-family: FontAwesome;
+ font-weight: normal;
+ font-style: normal;
+ src: url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.eot);
+ src: url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.woff) format("woff"), url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.ttf) format("truetype"), url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.svg#FontAwesome) format("svg");
+}
+
+.FontAwesome {
+ font-family: FontAwesome;
+ font-style: normal;
+ font-weight: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ display: inline-block;
+ text-align: center;
+}
+
+@font-face {
+ font-family: "Open Sans";
+ src: url(../valo/fonts/open-sans/OpenSans-Light-webfont.eot);
+ src: url(../valo/fonts/open-sans/OpenSans-Light-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/fonts/open-sans/OpenSans-Light-webfont.woff) format("woff"), url(../valo/fonts/open-sans/OpenSans-Light-webfont.ttf) format("truetype");
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Open Sans";
+ src: url(../valo/fonts/open-sans/OpenSans-Regular-webfont.eot);
+ src: url(../valo/fonts/open-sans/OpenSans-Regular-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/fonts/open-sans/OpenSans-Regular-webfont.woff) format("woff"), url(../valo/fonts/open-sans/OpenSans-Regular-webfont.ttf) format("truetype");
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Open Sans";
+ src: url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.eot);
+ src: url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.woff) format("woff"), url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.ttf) format("truetype");
+ font-weight: 600;
+ font-style: normal;
+}
+
+@-webkit-keyframes v-rotate-360 {
+ to {
+ -webkit-transform: rotate(360deg);
+ }
+ }
+
+@-moz-keyframes v-rotate-360 {
+ to {
+ -moz-transform: rotate(360deg);
+ }
+ }
+
+@-o-keyframes v-rotate-360 {
+ to {
+ -o-transform: rotate(360deg);
+ }
+ }
+
+@keyframes v-rotate-360 {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+
+@-webkit-keyframes v-progress-start {
+ 0% {
+ width: 0%;
+ }
+ 100% {
+ width: 50%;
+ }
+ }
+
+@-moz-keyframes v-progress-start {
+ 0% {
+ width: 0%;
+ }
+ 100% {
+ width: 50%;
+ }
+ }
+
+@keyframes v-progress-start {
+ 0% {
+ width: 0%;
+ }
+ 100% {
+ width: 50%;
+ }
+ }
+
+@-webkit-keyframes v-progress-delay {
+ 0% {
+ width: 50%;
+ }
+ 100% {
+ width: 90%;
+ }
+ }
+
+@-moz-keyframes v-progress-delay {
+ 0% {
+ width: 50%;
+ }
+ 100% {
+ width: 90%;
+ }
+ }
+
+@keyframes v-progress-delay {
+ 0% {
+ width: 50%;
+ }
+ 100% {
+ width: 90%;
+ }
+ }
+
+@-webkit-keyframes v-progress-wait {
+ 0% {
+ width: 90%;
+ height: 4px;
+ }
+ 3% {
+ width: 91%;
+ height: 7px;
+ }
+ 100% {
+ width: 96%;
+ height: 7px;
+ }
+ }
+
+@-moz-keyframes v-progress-wait {
+ 0% {
+ width: 90%;
+ height: 4px;
+ }
+ 3% {
+ width: 91%;
+ height: 7px;
+ }
+ 100% {
+ width: 96%;
+ height: 7px;
+ }
+ }
+
+@keyframes v-progress-wait {
+ 0% {
+ width: 90%;
+ height: 4px;
+ }
+ 3% {
+ width: 91%;
+ height: 7px;
+ }
+ 100% {
+ width: 96%;
+ height: 7px;
+ }
+ }
+
+@-webkit-keyframes v-progress-wait-pulse {
+ 0% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.1;
+ }
+ 100% {
+ opacity: 1;
+ }
+ }
+
+@-moz-keyframes v-progress-wait-pulse {
+ 0% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.1;
+ }
+ 100% {
+ opacity: 1;
+ }
+ }
+
+@keyframes v-progress-wait-pulse {
+ 0% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.1;
+ }
+ 100% {
+ opacity: 1;
+ }
+ }
+
+/**
+ * Outputs the context menu selectors and styles, which is used by Table and Tree for instance.
+ *
+ * @requires {mixin} valo-selection-item-style
+ * @requires {mixin} valo-selection-item-selected-style
+ */
+
+/**
+ * The background color for overlay elements.
+ *
+ * @type color
+ * @group overlay
+ */
+
+.v-shadow, .v-shadow-window {
+ display: none;
+}
+
+.v-ie8 .v-shadow, .v-ie8 .v-shadow-window {
+ display: block;
+}
+
+.v-ie8 .v-shadow .top, .v-ie8 .v-shadow-window .top {
+ position: absolute;
+ top: -6px;
+ right: 10px;
+ bottom: 6px;
+ left: -10px;
+ background: black;
+ filter: alpha(opacity=5) progid:DXImageTransform.Microsoft.blur(pixelradius=10, makeShadow=false);
+}
+
+.v-ie8 .v-shadow .top-left, .v-ie8 .v-shadow-window .top-left {
+ position: absolute;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+ background: black;
+ filter: alpha(opacity=9) progid:DXImageTransform.Microsoft.blur(pixelradius=0, makeShadow=false);
+}
+
+/**
+ * The backgound color for tooltips.
+ *
+ * @type color
+ * @group tooltip
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-absolutelayout) -
+ *
+ * @group absolutelayout
+ */
+
+/**
+ * Outputs the selectors and properties for the Accordion component.
+ *
+ * @param {string} $primary-stylename (v-accordion) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ * @group accordion
+ */
+
+/**
+ * Outputs the selectors and properties for the Button component.
+ *
+ * @param {string} $primary-stylename (v-button) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group button
+ */
+
+/**
+ * A list of colors for custom event colors. Can be an empty list of you don't
+ * need any custom event colors.
+ *
+ * @example javascript
+ * // Java code
+ * // 'event' is an instance of EditableCalendarEvent
+ * event.setStyleName("color1"); // 1st color in the list
+ * event.setStyleName("color2"); // 2nd color in the list
+ * // etc.
+ *
+ * @group calendar
+ */
+
+/**
+ * Outputs the selectors and properties for the CheckBox component.
+ *
+ * @param {string} $primary-stylename (v-checkbox) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group checkbox
+ */
+
+/**
+ * Outputs the global selectors and properties for the ColorPicker component - styles which are
+ * considered mandatory for the component to work properly.
+ *
+ * @param {string} $primary-stylename (v-colorpicker) - the primary style name for the selectors
+ *
+ * @group colorpicker
+ */
+
+/**
+ * Outputs the selectors and properties for the ComboBox component.
+ *
+ * @param {string} $primary-stylename (v-filterselect) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group combobox
+ */
+
+/**
+ * The amount of spacing between different widgets in a component group.
+ * If null, a computed value is used ($v-border size * -1, or 1px if $v-border size is 0)
+ *
+ * @group csslayout
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-customcomponent) -
+ *
+ * @group customcomponent
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-customlayout) -
+ *
+ * @group customlayout
+ */
+
+/**
+ * Outputs the selectors and properties for the DateField component.
+ *
+ * @param {string} $primary-stylename (v-datefield) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group datefield
+ */
+
+/**
+ * Outputs the styles and selectors for the DragAndDropWrapper component.
+ *
+ * @param {string} $primary-stylename (v-ddwrapper) - the primary style name for the selectors
+ *
+ * @group drag-n-drop
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-form) -
+ *
+ * @group form
+ */
+
+/**
+ * Outputs the selectors and properties for the FormLayout component.
+ *
+ * @param {string} $primary-stylename (v-formlayout) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group formlayout
+ */
+
+/**
+ *
+ * @group table
+ */
+
+@-webkit-keyframes valo-grid-editor-footer-animate-in {
+ 0% {
+ margin-top: -37px;
+ }
+ }
+
+@-moz-keyframes valo-grid-editor-footer-animate-in {
+ 0% {
+ margin-top: -37px;
+ }
+ }
+
+@keyframes valo-grid-editor-footer-animate-in {
+ 0% {
+ margin-top: -37px;
+ }
+ }
+
+@-webkit-keyframes valo-grid-editor-footer-animate-in-alt {
+ 0% {
+ margin-bottom: -38px;
+ }
+ 100% {
+ margin-bottom: -1px;
+ }
+ }
+
+@-moz-keyframes valo-grid-editor-footer-animate-in-alt {
+ 0% {
+ margin-bottom: -38px;
+ }
+ 100% {
+ margin-bottom: -1px;
+ }
+ }
+
+@keyframes valo-grid-editor-footer-animate-in-alt {
+ 0% {
+ margin-bottom: -38px;
+ }
+ 100% {
+ margin-bottom: -1px;
+ }
+ }
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-gridlayout) -
+ *
+ * @group gridlayout
+ */
+
+/**
+ * The font weight for headers.
+ *
+ * @group label
+ */
+
+/**
+ *
+ * @group link
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-loginform) -
+ *
+ * @group loginform
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-menubar) -
+ * @param {bool} $include-additional-styles -
+ *
+ * @group menubar
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-nativebutton) -
+ *
+ * @group nativebutton
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-select) -
+ *
+ * @group nativeselect
+ */
+
+/**
+ *
+ * @group notification
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-select-optiongroup) -
+ * @param {bool} $include-additional-styles -
+ *
+ * @group optiongroup
+ */
+
+/**
+ *
+ *
+ *
+ * @group orderedlayout
+ */
+
+/**
+ *
+ * @group panel
+ */
+
+@-webkit-keyframes v-popupview-animate-in {
+ 0% {
+ -webkit-transform: scale(0);
+ }
+ }
+
+@-moz-keyframes v-popupview-animate-in {
+ 0% {
+ -moz-transform: scale(0);
+ }
+ }
+
+@keyframes v-popupview-animate-in {
+ 0% {
+ -webkit-transform: scale(0);
+ -moz-transform: scale(0);
+ -ms-transform: scale(0);
+ -o-transform: scale(0);
+ transform: scale(0);
+ }
+ }
+
+/**
+ *
+ * @group progressbar
+ */
+
+/**
+ *
+ * @group richtextarea
+ */
+
+/**
+ *
+ * @group slider
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-splitpanel) -
+ * @param {bool} $include-additional-styles -
+ *
+ * @group splitpanel
+ */
+
+/**
+ *
+ * @group table
+ */
+
+/**
+ * Should the tabsheet content changes be animated.
+ *
+ * @group tabsheet
+ */
+
+/**
+ * The background color for text fields.
+ * @group textfield
+ */
+
+/**
+ * Outputs the selectors and properties for the TextArea component.
+ *
+ * @param {string} $primary-stylename (v-textarea) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group textarea
+ */
+
+/**
+ *
+ * @group tree
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-treetable) -
+ *
+ * @group treetable
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-select-twincol) -
+ *
+ * @group twin-column-select
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-upload) -
+ *
+ * @group upload
+ */
+
+/**
+ *
+ */
+
+/**
+ * @group window
+ */
+
+@-webkit-keyframes valo-modal-window-indication {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+ }
+
+@-moz-keyframes valo-modal-window-indication {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+ }
+
+@keyframes valo-modal-window-indication {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+ }
+
+@-webkit-keyframes valo-animate-out-scale-down-fade {
+ 100% {
+ -webkit-transform: scale(0.8);
+ opacity: 0;
+ }
+ }
+
+@-moz-keyframes valo-animate-out-scale-down-fade {
+ 100% {
+ -moz-transform: scale(0.8);
+ opacity: 0;
+ }
+ }
+
+@keyframes valo-animate-out-scale-down-fade {
+ 100% {
+ -webkit-transform: scale(0.8);
+ -moz-transform: scale(0.8);
+ -ms-transform: scale(0.8);
+ -o-transform: scale(0.8);
+ transform: scale(0.8);
+ opacity: 0;
+ }
+ }
+
+/**
+ * @group valo-menu
+ */
+
+.v-vaadin-version:after {
+ content: "7.6.1";
+}
+
+.v-widget {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: inline-block;
+ vertical-align: top;
+ text-align: left;
+ white-space: normal;
+}
+
+.v-generated-body {
+ overflow: hidden;
+ margin: 0;
+ padding: 0;
+ border: 0;
+}
+
+.v-app {
+ height: 100%;
+ -webkit-tap-highlight-color: transparent;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.v-app input[type="text"], .v-app .v-slot > .v-caption, .v-app .v-gridlayout-slot > .v-caption, .v-app .v-has-caption > .v-caption, .v-app .v-formlayout-captioncell > .v-caption, .v-app .v-csslayout > .v-caption {
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+}
+
+.v-app input::-ms-clear {
+ display: none;
+}
+
+.v-ui {
+ position: relative;
+}
+
+.v-ui.v-ui-embedded {
+ margin-top: -1px;
+ border-top: 1px solid transparent;
+}
+
+.v-ui:focus {
+ outline: none;
+}
+
+.v-overlay-container {
+ width: 0;
+ height: 0;
+}
+
+.v-drag-element {
+ z-index: 60000;
+ position: absolute !important;
+ cursor: default;
+}
+
+.v-clip {
+ overflow: hidden;
+}
+
+.v-scrollable {
+ overflow: auto;
+}
+
+.v-scrollable > .v-widget {
+ vertical-align: middle;
+ overflow: hidden;
+}
+
+.v-ios.v-webkit .v-scrollable {
+ -webkit-overflow-scrolling: touch;
+}
+
+.v-ios5.v-webkit .v-scrollable {
+ -webkit-overflow-scrolling: none;
+}
+
+.v-webkit.v-ios .v-browserframe {
+ -webkit-overflow-scrolling: touch;
+ overflow: auto;
+}
+
+.v-assistive-device-only {
+ position: absolute;
+ top: -2000px;
+ left: -2000px;
+ width: 10px;
+ overflow: hidden;
+}
+
+.v-icon {
+ cursor: inherit;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.v-icon, .v-errorindicator, .v-required-field-indicator {
+ display: inline-block;
+ line-height: inherit;
+}
+
+.v-caption {
+ display: inline-block;
+ white-space: nowrap;
+ line-height: 1.55;
+}
+
+.v-captiontext {
+ display: inline-block;
+ line-height: inherit;
+}
+
+div.v-layout.v-horizontal.v-widget {
+ white-space: nowrap;
+}
+
+.v-layout.v-vertical > .v-expand, .v-layout.v-horizontal > .v-expand {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+}
+
+.v-slot, .v-spacing {
+ display: inline-block;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+.v-vertical > .v-slot:after {
+ display: inline-block;
+ clear: both;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+}
+
+.v-vertical > .v-slot, .v-vertical > .v-expand > .v-slot {
+ display: block;
+ clear: both;
+}
+
+.v-horizontal > .v-slot, .v-horizontal > .v-expand > .v-slot {
+ height: 100%;
+}
+
+.v-horizontal > .v-expand > .v-slot {
+ position: relative;
+}
+
+.v-vertical > .v-spacing, .v-vertical > .v-expand > .v-spacing {
+ width: 0 !important;
+ display: block;
+ clear: both;
+}
+
+.v-horizontal > .v-spacing, .v-horizontal > .v-expand > .v-spacing {
+ height: 0 !important;
+}
+
+.v-align-middle:before, .v-align-bottom:before, .v-expand > .v-align-middle:before, .v-expand > .v-align-bottom:before {
+ content: "";
+ display: inline-block;
+ height: 100%;
+ vertical-align: middle;
+ width: 0;
+}
+
+.v-align-middle, .v-align-bottom {
+ white-space: nowrap;
+}
+
+.v-align-middle > .v-widget, .v-align-bottom > .v-widget {
+ display: inline-block;
+}
+
+.v-align-middle, .v-align-middle > .v-widget {
+ vertical-align: middle;
+}
+
+.v-align-bottom, .v-align-bottom > .v-widget {
+ vertical-align: bottom;
+}
+
+.v-align-center {
+ text-align: center;
+}
+
+.v-align-center > .v-widget {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.v-align-right {
+ text-align: right;
+}
+
+.v-align-right > .v-widget {
+ margin-left: auto;
+}
+
+.v-has-caption, .v-has-caption > .v-caption {
+ display: inline-block;
+}
+
+.v-caption-on-left, .v-caption-on-right {
+ white-space: nowrap;
+}
+
+.v-caption-on-top > .v-caption, .v-caption-on-bottom > .v-caption {
+ display: block;
+}
+
+.v-caption-on-left > .v-caption {
+ padding-right: 0.5em;
+}
+
+.v-caption-on-left > .v-widget, .v-caption-on-right > .v-widget {
+ display: inline-block;
+}
+
+.v-has-caption.v-has-width > .v-widget {
+ width: 100% !important;
+}
+
+.v-has-caption.v-has-height > .v-widget {
+ height: 100% !important;
+}
+
+.v-gridlayout {
+ position: relative;
+}
+
+.v-gridlayout-slot {
+ position: absolute;
+ line-height: 1.55;
+}
+
+.v-gridlayout-spacing-on {
+ overflow: hidden;
+}
+
+.v-gridlayout-spacing, .v-gridlayout-spacing-off {
+ padding-left: 0;
+ padding-top: 0;
+}
+
+.v-gridlayout-spacing-off {
+ overflow: hidden;
+}
+
+.v-calendar-month-day-scrollable {
+ overflow-y: scroll;
+}
+
+.v-calendar-week-wrapper {
+ position: relative;
+ overflow: hidden;
+}
+
+.v-calendar-current-time {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ height: 1px;
+ background: red;
+ z-index: 2;
+}
+
+.v-calendar-event-resizetop, .v-calendar-event-resizebottom {
+ position: absolute;
+ height: 5%;
+ min-height: 3px;
+ width: 100%;
+ z-index: 1;
+}
+
+.v-calendar-event-resizetop {
+ cursor: row-resize;
+ top: 0;
+}
+
+.v-calendar-event-resizebottom {
+ cursor: row-resize;
+ bottom: 0;
+}
+
+.v-calendar-header-month td:first-child {
+ padding-left: 20px;
+}
+
+.v-calendar-month-sizedheight .v-calendar-month-day {
+ height: 100px;
+}
+
+.v-calendar-month-sizedwidth .v-calendar-month-day {
+ width: 100px;
+}
+
+.v-calendar-header-month-Hsized .v-calendar-header-day {
+ width: 101px;
+}
+
+.v-calendar-header-month-Hsized td:first-child {
+ padding-left: 21px;
+}
+
+.v-calendar-header-day-Hsized {
+ width: 200px;
+}
+
+.v-calendar-week-numbers-Vsized .v-calendar-week-number {
+ height: 100px;
+ line-height: 100px;
+}
+
+.v-calendar-week-wrapper-Vsized {
+ height: 400px;
+ overflow-x: hidden !important;
+}
+
+.v-calendar-times-Vsized .v-calendar-time {
+ height: 38px;
+}
+
+.v-calendar-times-Hsized .v-calendar-time {
+ width: 42px;
+}
+
+.v-calendar-day-times-Vsized .v-datecellslot, .v-calendar-day-times-Vsized .v-datecellslot-even {
+ height: 18px;
+}
+
+.v-calendar-day-times-Hsized, .v-calendar-day-times-Hsized .v-datecellslot, .v-calendar-day-times-Hsized .v-datecellslot-even {
+ width: 200px;
+}
+
+.v-colorpicker-popup.v-window {
+ min-width: 220px !important;
+}
+
+.v-colorpicker-gradient-container {
+ overflow: visible !important;
+}
+
+.v-colorpicker-gradient-clicklayer {
+ opacity: 0;
+ filter: alpha(opacity=0) ;
+}
+
+.rgb-gradient .v-colorpicker-gradient-background {
+ background: url(../valo/components/img/colorpicker/gradient2.png);
+}
+
+.hsv-gradient .v-colorpicker-gradient-foreground {
+ background: url(../valo/components/img/colorpicker/gradient.png);
+}
+
+.v-colorpicker-gradient-higherbox:before {
+ content: "";
+ width: 11px;
+ height: 11px;
+ border-radius: 7px;
+ border: 1px solid #fff;
+ -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3);
+ position: absolute;
+ bottom: -6px;
+ left: -6px;
+}
+
+.v-colorpicker-popup .v-slider.v-slider-red:before {
+ background-color: red;
+}
+
+.v-colorpicker-popup .v-slider.v-slider-green:before {
+ background-color: green;
+}
+
+.v-colorpicker-popup .v-slider.v-slider-blue:before {
+ background-color: blue;
+}
+
+.v-colorpicker-popup .v-slider.hue-slider:before {
+ background: url(../valo/components/img/colorpicker/slider_hue_bg.png);
+}
+
+.v-colorpicker-popup input.v-textfield-dark {
+ color: #fff;
+}
+
+.v-colorpicker-popup input.v-textfield-light {
+ color: #000;
+}
+
+.v-colorpicker-grid {
+ height: 319px;
+}
+
+.v-colorpicker-popup .colorselect td {
+ line-height: 15px;
+}
+
+.v-table-header table, .v-table-footer table, .v-table-table {
+ border-spacing: 0;
+ border-collapse: separate;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ line-height: 1.55;
+}
+
+.v-table-resizer, .v-table-sort-indicator {
+ float: right;
+}
+
+.v-table-caption-container-align-center {
+ text-align: center;
+}
+
+.v-table-caption-container-align-right {
+ text-align: right;
+}
+
+.v-table-header td, .v-table-footer td, .v-table-cell-content {
+ padding: 0;
+}
+
+.v-table-sort-indicator {
+ width: 0;
+}
+
+.v-tabsheet-hidetabs > .v-tabsheet-tabcontainer, .v-tabsheet-spacertd, .v-disabled .v-tabsheet-scroller, .v-tabsheet .v-disabled .v-tabsheet-caption-close {
+ display: none;
+}
+
+.v-tabsheet {
+ overflow: visible !important;
+ position: relative;
+}
+
+.v-tabsheet-tabcontainer table, .v-tabsheet-tabcontainer tbody, .v-tabsheet-tabcontainer tr {
+ display: inline-block;
+ border-spacing: 0;
+ border-collapse: collapse;
+ vertical-align: top;
+}
+
+.v-tabsheet-tabcontainer td {
+ display: inline-block;
+ padding: 0;
+}
+
+.v-tabsheet-tabs {
+ white-space: nowrap;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.v-tabsheet-content {
+ position: relative;
+}
+
+.v-tabsheet-content > div > .v-scrollable > .v-margin-top {
+ padding-top: 12px;
+}
+
+.v-tabsheet-content > div > .v-scrollable > .v-margin-right {
+ padding-right: 12px;
+}
+
+.v-tabsheet-content > div > .v-scrollable > .v-margin-bottom {
+ padding-bottom: 12px;
+}
+
+.v-tabsheet-content > div > .v-scrollable > .v-margin-left {
+ padding-left: 12px;
+}
+
+.v-splitpanel-vertical, .v-splitpanel-horizontal {
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.v-splitpanel-hsplitter {
+ z-index: 100;
+ cursor: e-resize;
+ cursor: col-resize;
+}
+
+.v-splitpanel-vsplitter {
+ z-index: 100;
+ cursor: s-resize;
+ cursor: row-resize;
+}
+
+.v-splitpanel-hsplitter:after, .v-splitpanel-vsplitter:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+.v-splitpanel-hsplitter div, .v-splitpanel-vsplitter div {
+ width: inherit;
+ height: inherit;
+ overflow: hidden;
+ position: relative;
+}
+
+.v-splitpanel-hsplitter div:before, .v-splitpanel-vsplitter div:before {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+.v-disabled [class$="splitter"] div {
+ cursor: default;
+}
+
+.v-disabled [class$="splitter"] div:before {
+ display: none;
+}
+
+.v-splitpanel-horizontal > div > .v-splitpanel-second-container {
+ position: static !important;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.v-splitpanel-horizontal > div > .v-splitpanel-first-container {
+ display: inline-block;
+ vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay.v-app, .org_osbee_vaadin_addons_designer_overlay.v-app-loading {
+ font: 300 16px/1.55 "Open Sans", sans-serif;
+ color: #464646;
+ background-color: #fafafa;
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-app-loading {
+ width: 100%;
+ height: 100%;
+ background: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-app-loading:before {
+ content: "";
+ position: fixed;
+ z-index: 100;
+ top: 45%;
+ left: 50%;
+ width: 28px;
+ height: 28px;
+ padding: 9px;
+ margin-top: -24px;
+ margin-left: -24px;
+ background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50%;
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-loading-indicator {
+ position: fixed !important;
+ z-index: 99999;
+ left: 0;
+ right: auto;
+ top: 0;
+ width: 50%;
+ opacity: 1;
+ height: 4px;
+ background-color: #197de1;
+ pointer-events: none;
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ -webkit-animation: v-progress-start 1000ms 200ms both;
+ -moz-animation: v-progress-start 1000ms 200ms both;
+ animation: v-progress-start 1000ms 200ms both;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-loading-indicator[style*="none"] {
+ display: block !important;
+ width: 100% !important;
+ opacity: 0;
+ -webkit-animation: none;
+ -moz-animation: none;
+ animation: none;
+ -webkit-transition: opacity 500ms 300ms, width 300ms;
+ -moz-transition: opacity 500ms 300ms, width 300ms;
+ transition: opacity 500ms 300ms, width 300ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay {
+ width: 90%;
+ -webkit-animation: v-progress-delay 3.8s forwards;
+ -moz-animation: v-progress-delay 3.8s forwards;
+ animation: v-progress-delay 3.8s forwards;
+}
+
+.v-ff .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay {
+ width: 50%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait {
+ width: 96%;
+ -webkit-animation: v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards;
+ -moz-animation: v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards;
+ animation: v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards;
+}
+
+.v-ff .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait {
+ width: 90%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait {
+ width: 28px !important;
+ height: 28px;
+ padding: 9px;
+ background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50%;
+ border-radius: 4px;
+ top: 9px;
+ right: 9px;
+ left: auto;
+ filter: alpha(opacity=50);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator[style*="none"], .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay[style*="none"], .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait[style*="none"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator[style*="none"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay[style*="none"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait[style*="none"] {
+ display: none !important;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait {
+ filter: alpha(opacity=100);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-scrollable:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay img.v-icon {
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption {
+ font-size: 14px;
+ font-weight: 400;
+ padding-bottom: 0.3em;
+ padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-on-left .v-caption, .org_osbee_vaadin_addons_designer_overlay .v-caption-on-right .v-caption {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-icon + .v-captiontext, .org_osbee_vaadin_addons_designer_overlay .v-icon + span {
+ margin-left: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-icon + .v-captiontext:empty, .org_osbee_vaadin_addons_designer_overlay .v-icon + span:empty {
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-errorindicator {
+ color: #ed473b;
+ font-weight: 600;
+ width: 19px;
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-errorindicator:before {
+ content: "!";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-required-field-indicator {
+ color: #ed473b;
+ padding: 0 0.2em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay select {
+ font: inherit;
+ font-weight: 400;
+ line-height: inherit;
+ padding: 5px;
+ margin: 0;
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay select:focus {
+ outline: none;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay button {
+ font: inherit;
+ font-weight: 400;
+ line-height: 1.55;
+}
+
+.org_osbee_vaadin_addons_designer_overlay a {
+ cursor: pointer;
+ color: #197de1;
+ text-decoration: underline;
+ font-weight: inherit;
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay a:hover {
+ color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay a.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-disabled {
+ cursor: default !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-drag-element {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+ border-radius: 4px;
+ overflow: hidden;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip {
+ background-color: #323232;
+ background-color: rgba(50, 50, 50, 0.9);
+ -webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
+ color: white;
+ padding: 5px 9px;
+ border-radius: 3px;
+ max-width: 35em;
+ overflow: hidden !important;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip div[style*="width"] {
+ width: auto !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip .v-errormessage {
+ background-color: white;
+ background-color: #fff;
+ color: #ed473b;
+ margin: -5px -9px;
+ padding: 5px 9px;
+ max-height: 10em;
+ overflow: auto;
+ font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip .v-errormessage h2:only-child {
+ font: inherit;
+ line-height: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip .v-tooltip-text {
+ max-height: 10em;
+ overflow: auto;
+ margin-top: 10px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip .v-errormessage[aria-hidden="true"] + .v-tooltip-text {
+ margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip h1, .org_osbee_vaadin_addons_designer_overlay .v-tooltip h2, .org_osbee_vaadin_addons_designer_overlay .v-tooltip h3, .org_osbee_vaadin_addons_designer_overlay .v-tooltip h4 {
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu {
+ padding: 4px 4px;
+ border-radius: 4px;
+ background-color: white;
+ color: #474747;
+ -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ -webkit-backface-visibility: hidden;
+ -moz-backface-visibility: hidden;
+ -ms-backface-visibility: hidden;
+ backface-visibility: hidden;
+ padding: 4px 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu[class*="animate-in"] {
+ -webkit-animation: valo-overlay-animate-in 120ms;
+ -moz-animation: valo-overlay-animate-in 120ms;
+ animation: valo-overlay-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu[class*="animate-out"] {
+ -webkit-animation: valo-animate-out-fade 120ms;
+ -moz-animation: valo-animate-out-fade 120ms;
+ animation: valo-animate-out-fade 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu table {
+ border-spacing: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu .gwt-MenuItem {
+ cursor: pointer;
+ line-height: 27px;
+ padding: 0 20px 0 10px;
+ border-radius: 3px;
+ font-weight: 400;
+ white-space: nowrap;
+ position: relative;
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu .gwt-MenuItem:active:before {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background: #0957a6;
+ opacity: 0.15;
+ filter: alpha(opacity=15.0) ;
+ pointer-events: none;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu .gwt-MenuItem .v-icon {
+ max-height: 27px;
+ margin-right: 5px;
+ min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu .gwt-MenuItem-selected {
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ color: #ecf2f8;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog {
+ color: white;
+ top: 12px;
+ right: 12px;
+ max-width: 100%;
+ border-radius: 0;
+ -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+ box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+ padding: 12px 15px;
+ background-color: #444;
+ background-color: rgba(68, 68, 68, 0.9);
+ line-height: 22px;
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .text {
+ display: inline-block;
+ padding-left: 10px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .spinner {
+ height: 24px !important;
+ width: 24px !important;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 2px solid rgba(25, 125, 225, 0.2);
+ border-top-color: #197de1;
+ border-right-color: #197de1;
+ border-radius: 100%;
+ -webkit-animation: v-rotate-360 500ms infinite linear;
+ -moz-animation: v-rotate-360 500ms infinite linear;
+ animation: v-rotate-360 500ms infinite linear;
+ pointer-events: none;
+ display: none;
+ vertical-align: middle;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .spinner, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .spinner {
+ border: none;
+ border-radius: 4px;
+ background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+ background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .spinner {
+ min-width: 30px;
+ min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog.active .spinner {
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-absolutelayout-wrapper {
+ position: absolute;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-absolutelayout-margin, .org_osbee_vaadin_addons_designer_overlay .v-absolutelayout-canvas {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-absolutelayout.v-has-height > div, .org_osbee_vaadin_addons_designer_overlay .v-absolutelayout.v-has-height .v-absolutelayout-margin {
+ height: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-absolutelayout.v-has-height > div, .org_osbee_vaadin_addons_designer_overlay .v-absolutelayout.v-has-width .v-absolutelayout-margin {
+ width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-top {
+ padding-top: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-right {
+ padding-right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-bottom {
+ padding-bottom: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left {
+ padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-spacing {
+ width: 12px;
+ height: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well {
+ background: #f5f5f5;
+ color: #454545;
+ -webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well > div > [class*="-caption"], .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well > div > [class*="-caption"] {
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well > .v-margin-top, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well > .v-margin-top {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well > .v-margin-right, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well > .v-margin-right {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well > .v-margin-bottom, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well > .v-margin-bottom {
+ padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well > .v-margin-left, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well > .v-margin-left {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card {
+ background: white;
+ color: #474747;
+ border-radius: 4px;
+ border: 1px solid #d5d5d5;
+ -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card > .v-margin-top, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card > .v-margin-top {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card > .v-margin-right, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card > .v-margin-right {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card > .v-margin-bottom, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card > .v-margin-bottom {
+ padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card > .v-margin-left, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card > .v-margin-left {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-wrapping {
+ white-space: normal !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-wrapping > .v-spacing + .v-slot, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-wrapping > .v-slot:first-child {
+ margin-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-wrapping > .v-slot:first-child:last-child {
+ margin-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button {
+ position: relative;
+ text-align: center;
+ white-space: nowrap;
+ outline: none;
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ height: 37px;
+ padding: 0 16px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:before {
+ content: "";
+ display: inline-block;
+ width: 0;
+ height: 100%;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button > div {
+ vertical-align: middle;
+}
+
+.v-sa .org_osbee_vaadin_addons_designer_overlay .v-button:before {
+ height: 110%;
+}
+
+.v-ff .org_osbee_vaadin_addons_designer_overlay .v-button:before {
+ height: 107%;
+}
+
+.v-ie .org_osbee_vaadin_addons_designer_overlay .v-button:before {
+ margin-top: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:focus:after {
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button.v-disabled:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:hover:after {
+ background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:focus:after {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:active:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary {
+ height: 37px;
+ padding: 0 16px;
+ color: #ecf2f8;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #1362b1;
+ border-top-color: #156ab3;
+ border-bottom-color: #1156a8;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ -webkit-box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+ padding: 0 19px;
+ font-weight: bold;
+ min-width: 81px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary:hover:after {
+ background-color: rgba(90, 163, 237, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary:focus:after {
+ border: inherit;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary:active:after {
+ background-color: rgba(2, 62, 122, 0.2);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-button-primary {
+ min-width: 43px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly {
+ height: 37px;
+ padding: 0 16px;
+ color: #eaf4e9;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #227719;
+ border-top-color: #257d1a;
+ border-bottom-color: #1e6b15;
+ background-color: #2c9720;
+ background-image: -webkit-linear-gradient(top, #2f9f22 2%, #26881b 98%);
+ background-image: linear-gradient(to bottom,#2f9f22 2%, #26881b 98%);
+ -webkit-box-shadow: inset 0 1px 0 #46b33a, inset 0 -1px 0 #26811b, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 #46b33a, inset 0 -1px 0 #26811b, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly:hover:after {
+ background-color: rgba(65, 211, 48, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly:focus:after {
+ border: inherit;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly:active:after {
+ background-color: rgba(14, 86, 6, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger {
+ height: 37px;
+ padding: 0 16px;
+ color: #f9f0ef;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #bb382e;
+ border-top-color: #bc3c31;
+ border-bottom-color: #b13028;
+ background-color: #ed473b;
+ background-image: -webkit-linear-gradient(top, #ee4c3f 2%, #e13e33 98%);
+ background-image: linear-gradient(to bottom,#ee4c3f 2%, #e13e33 98%);
+ -webkit-box-shadow: inset 0 1px 0 #ef786f, inset 0 -1px 0 #da3c31, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 #ef786f, inset 0 -1px 0 #da3c31, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger:hover:after {
+ background-color: rgba(243, 137, 129, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger:focus:after {
+ border: inherit;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger:active:after {
+ background-color: rgba(146, 12, 2, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background: transparent;
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless:hover:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless:active {
+ opacity: 0.7;
+ filter: alpha(opacity=70) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless:active:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background: transparent;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored:hover {
+ color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored:hover:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored:active {
+ opacity: 0.7;
+ filter: alpha(opacity=70) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored:active:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-quiet {
+ visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-quiet:focus, .org_osbee_vaadin_addons_designer_overlay .v-button-quiet:hover {
+ visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-quiet [class*="wrap"] {
+ visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-quiet [class*="caption"] {
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background: transparent;
+ color: inherit;
+ cursor: pointer;
+ color: #197de1;
+ text-decoration: underline;
+ font-weight: inherit;
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link:hover:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link:active {
+ opacity: 0.7;
+ filter: alpha(opacity=70) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link:active:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link:hover {
+ color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-tiny {
+ height: 28px;
+ padding: 0 13px;
+
+
+ font-size: 12px;
+
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-tiny:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-small {
+ height: 31px;
+ padding: 0 14px;
+
+
+ font-size: 14px;
+
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-small:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-large {
+ height: 44px;
+ padding: 0 19px;
+
+
+ font-size: 20px;
+
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-large:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-huge {
+ height: 59px;
+ padding: 0 26px;
+
+
+ font-size: 26px;
+
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-huge:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-right [class*="wrap"] {
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-right .v-icon {
+ float: right;
+ margin-left: 13px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-right .v-icon + span:not(:empty) {
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-top {
+ height: auto;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-top [class*="wrap"] {
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-top .v-icon {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-top .v-icon + span:not(:empty) {
+ margin-top: 7px;
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only {
+ width: 37px;
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only.v-button-tiny {
+ width: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only.v-button-small {
+ width: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only.v-button-large {
+ width: 44px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only.v-button-huge {
+ width: 59px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only .v-button-caption {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox {
+ position: relative;
+ line-height: 19px;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-has-width label {
+ white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox {
+ padding-left: 25px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox label {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ left: 0.2em;
+ top: 0.2em;
+ z-index: 0;
+ margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input:focus ~ label:before {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input ~ label:after {
+ content: "";
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 19px;
+ height: 19px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 4px;
+ font-size: 13px;
+ text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input ~ label:before {
+ height: 18.5px;
+ padding: 0 9px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ padding: 0;
+ height: 19px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input ~ label:after {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ color: transparent;
+ -webkit-transition: color 100ms;
+ -moz-transition: color 100ms;
+ transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input:active ~ label:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input:checked ~ label:after {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-checkbox > label .v-icon {
+ margin: 0 6px 0 3px;
+ min-width: 1em;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-disabled > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-disabled > .v-icon {
+ cursor: default;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-disabled > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-disabled > input:active ~ label:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly > .v-icon {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly > input:active ~ label:after {
+ background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly > input ~ label:after {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small {
+ position: relative;
+ line-height: 16px;
+ white-space: nowrap;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-has-width label {
+ white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small {
+ padding-left: 21px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small label {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ left: 0.2em;
+ top: 0.2em;
+ z-index: 0;
+ margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input:focus ~ label:before {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input ~ label:after {
+ content: "";
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 4px;
+ font-size: 11px;
+ text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input ~ label:before {
+ height: 15.5px;
+ padding: 0 7px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ padding: 0;
+ height: 16px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input ~ label:after {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ color: transparent;
+ -webkit-transition: color 100ms;
+ -moz-transition: color 100ms;
+ transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input:active ~ label:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input:checked ~ label:after {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > label .v-icon {
+ margin: 0 5px 0 3px;
+ min-width: 1em;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-disabled > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-disabled > .v-icon {
+ cursor: default;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-disabled > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-disabled > input:active ~ label:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly > .v-icon {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly > input:active ~ label:after {
+ background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly > input ~ label:after {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large {
+ position: relative;
+ line-height: 22px;
+ white-space: nowrap;
+ font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-has-width label {
+ white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large {
+ padding-left: 29px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large label {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ left: 0.2em;
+ top: 0.2em;
+ z-index: 0;
+ margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input:focus ~ label:before {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input ~ label:after {
+ content: "";
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 22px;
+ height: 22px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 4px;
+ font-size: 15px;
+ text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input ~ label:before {
+ height: 22px;
+ padding: 0 10px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ padding: 0;
+ height: 22px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input ~ label:after {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ color: transparent;
+ -webkit-transition: color 100ms;
+ -moz-transition: color 100ms;
+ transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input:active ~ label:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input:checked ~ label:after {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > label .v-icon {
+ margin: 0 7px 0 4px;
+ min-width: 1em;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-disabled > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-disabled > .v-icon {
+ cursor: default;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-disabled > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-disabled > input:active ~ label:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly > .v-icon {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly > input:active ~ label:after {
+ background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly > input ~ label:after {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect {
+ position: relative;
+ width: 185px;
+ height: 37px;
+ border-radius: 4px;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 37px;
+ border-radius: 4px;
+ padding: 4px 9px;
+ border: 1px solid #c5c5c5;
+ background: white;
+ color: #474747;
+ -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ width: 100% !important;
+ height: 100%;
+ padding-right: 38px;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"] {
+ line-height: 37px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"].v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"]:focus {
+ outline: none;
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"][class*="prompt"] {
+ color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect .v-icon + [class*="input"] {
+ padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect img.v-icon {
+ max-height: 37px;
+ margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect span.v-icon {
+ color: #474747;
+ width: 37px;
+ line-height: 1;
+ padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect[class*="prompt"] > [class*="input"] {
+ color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ position: absolute;
+ width: 37px;
+ top: 1px;
+ right: 1px;
+ bottom: 1px;
+ border-left: 1px solid #e4e4e4;
+ color: #a3a3a3;
+ border-radius: 0 3px 3px 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"] {
+ background-color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f078";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+ position: absolute;
+ width: 37px;
+ text-align: center;
+ top: 50%;
+ line-height: 1;
+ margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"]:hover:before {
+ color: #474747;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+ background-color: rgba(128, 128, 128, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-disabled [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-disabled [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-readonly [class*="input"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-readonly [class*="input"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-readonly [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-readonly [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect .v-icon {
+ position: absolute;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-error .v-filterselect-input {
+ border-color: #ed473b !important;
+ background: #fffbfb;
+ color: #6c2621;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-error .v-filterselect-button {
+ color: #ed473b;
+ border-color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup {
+ margin-top: 5px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup[class*="animate-in"] {
+ -webkit-animation: valo-overlay-animate-in 120ms;
+ -moz-animation: valo-overlay-animate-in 120ms;
+ animation: valo-overlay-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup [class$="suggestmenu"] {
+ padding: 4px 4px;
+ border-radius: 4px;
+ background-color: white;
+ color: #474747;
+ -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ -webkit-backface-visibility: hidden;
+ -moz-backface-visibility: hidden;
+ -ms-backface-visibility: hidden;
+ backface-visibility: hidden;
+ padding: 4px 4px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: relative;
+ z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup [class$="suggestmenu"][style*="height"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup table, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup tbody, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup tr, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup td {
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup .gwt-MenuItem {
+ cursor: pointer;
+ line-height: 27px;
+ padding: 0 20px 0 10px;
+ border-radius: 3px;
+ font-weight: 400;
+ white-space: nowrap;
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup .gwt-MenuItem:active:before {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background: #0957a6;
+ opacity: 0.15;
+ filter: alpha(opacity=15.0) ;
+ pointer-events: none;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup .gwt-MenuItem .v-icon {
+ max-height: 27px;
+ margin-right: 5px;
+ min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup .gwt-MenuItem-selected {
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ color: #ecf2f8;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup [class$="status"] {
+ position: absolute;
+ right: 4px;
+ background: rgba(212, 212, 212, 0.9);
+ color: #3b3b3b;
+ border-radius: 0 0 4px 4px;
+ height: 23px;
+ bottom: -23px;
+ font-size: 12px;
+ line-height: 23px;
+ padding: 0 6px;
+ cursor: default;
+ pointer-events: none;
+ -webkit-animation: valo-animate-in-slide-down 200ms 80ms backwards;
+ -moz-animation: valo-animate-in-slide-down 200ms 80ms backwards;
+ animation: valo-animate-in-slide-down 200ms 80ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup [class$="status"] > * {
+ color: #3b3b3b;
+ text-decoration: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"] {
+ position: absolute;
+ z-index: 3;
+ right: 0;
+ opacity: 0.2;
+ filter: alpha(opacity=20) ;
+ cursor: pointer;
+ -webkit-transition: all 200ms;
+ -moz-transition: all 200ms;
+ transition: all 200ms;
+ width: 25px;
+ height: 25px;
+ line-height: 25px;
+ text-align: center;
+ font-family: ThemeIcons;
+ -webkit-transform: scale(0.8);
+ -moz-transform: scale(0.8);
+ -ms-transform: scale(0.8);
+ -o-transform: scale(0.8);
+ transform: scale(0.8);
+ color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"]:after {
+ content: "";
+ position: absolute;
+ display: block;
+ border-radius: 50%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"]:hover {
+ opacity: 1;
+ filter: none ;
+ background: rgba(250, 250, 250, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"]:hover:after {
+ top: -10px;
+ bottom: -10px;
+ left: -20px;
+ right: -20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"] span {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup:hover div[class*="page"] {
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="prev"] {
+ top: 0;
+ -webkit-transform-origin: 100% 0%;
+ -moz-transform-origin: 100% 0%;
+ -ms-transform-origin: 100% 0%;
+ -o-transform-origin: 100% 0%;
+ transform-origin: 100% 0%;
+ border-radius: 0 4px 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="prev"]:before {
+ content: "\f0d8";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="next"] {
+ bottom: 0;
+ -webkit-transform-origin: 100% 100%;
+ -moz-transform-origin: 100% 100%;
+ -ms-transform-origin: 100% 100%;
+ -o-transform-origin: 100% 100%;
+ transform-origin: 100% 100%;
+ border-radius: 4px 0 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="next"]:before {
+ content: "\f0d7";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="-off"] {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input {
+ cursor: pointer;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input [class*="input"] {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ cursor: inherit;
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ text-shadow: inherit;
+ text-overflow: ellipsis;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input [class*="input"]:focus {
+ outline: none;
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input [class$="button"] {
+ border-left: none !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input:hover [class$="button"]:before {
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless .v-filterselect-input {
+ border: none;
+ border-radius: 0;
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless .v-filterselect-input:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless .v-filterselect-input[class*="prompt"] {
+ color: inherit;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless .v-filterselect-button {
+ border: none;
+ color: inherit;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless.v-filterselect-prompt .v-filterselect-input {
+ color: inherit;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-align-right input {
+ text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-align-center input {
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny {
+ height: 28px;
+
+ font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class*="input"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 28px;
+
+ padding: 3px 5px;
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ width: 100% !important;
+ height: 100%;
+ padding-right: 29px;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class*="input"] {
+ line-height: 28px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny .v-icon + [class*="input"] {
+ padding-left: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny img.v-icon {
+ max-height: 28px;
+ margin-left: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny span.v-icon {
+
+ width: 28px;
+ line-height: 1;
+ padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class$="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ position: absolute;
+ width: 28px;
+ border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class$="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f078";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+ position: absolute;
+ width: 28px;
+ text-align: center;
+ top: 50%;
+ line-height: 1;
+ margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class$="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-disabled [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-disabled [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-readonly [class*="input"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-readonly [class*="input"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-readonly [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-readonly [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small {
+ height: 31px;
+
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class*="input"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class*="input"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 31px;
+
+ padding: 3px 6px;
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ width: 100% !important;
+ height: 100%;
+ padding-right: 32px;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class*="input"], .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class*="input"] {
+ line-height: 31px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact .v-icon + [class*="input"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small .v-icon + [class*="input"] {
+ padding-left: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact img.v-icon, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small img.v-icon {
+ max-height: 31px;
+ margin-left: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact span.v-icon, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small span.v-icon {
+
+ width: 31px;
+ line-height: 1;
+ padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class$="button"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class$="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ position: absolute;
+ width: 31px;
+ border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class$="button"]:before, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class$="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f078";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+ position: absolute;
+ width: 31px;
+ text-align: center;
+ top: 50%;
+ line-height: 1;
+ margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class$="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class$="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-disabled [class$="button"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-disabled [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-disabled [class$="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-disabled [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-readonly [class*="input"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-readonly [class*="input"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-readonly [class*="input"]:focus, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-readonly [class*="input"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-readonly [class$="button"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-readonly [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-readonly [class$="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-readonly [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-small {
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large {
+ height: 44px;
+
+ font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class*="input"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 44px;
+
+ padding: 5px 8px;
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ width: 100% !important;
+ height: 100%;
+ padding-right: 45px;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class*="input"] {
+ line-height: 44px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large .v-icon + [class*="input"] {
+ padding-left: 44px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large img.v-icon {
+ max-height: 44px;
+ margin-left: 8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large span.v-icon {
+
+ width: 44px;
+ line-height: 1;
+ padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class$="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ position: absolute;
+ width: 44px;
+ border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class$="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f078";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+ position: absolute;
+ width: 44px;
+ text-align: center;
+ top: 50%;
+ line-height: 1;
+ margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class$="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-disabled [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-disabled [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-readonly [class*="input"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-readonly [class*="input"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-readonly [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-readonly [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge {
+ height: 59px;
+
+ font-size: 26px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class*="input"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 59px;
+
+ padding: 7px 10px;
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ width: 100% !important;
+ height: 100%;
+ padding-right: 60px;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class*="input"] {
+ line-height: 59px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge .v-icon + [class*="input"] {
+ padding-left: 59px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge img.v-icon {
+ max-height: 59px;
+ margin-left: 10px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge span.v-icon {
+
+ width: 59px;
+ line-height: 1;
+ padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class$="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ position: absolute;
+ width: 59px;
+ border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class$="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f078";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+ position: absolute;
+ width: 59px;
+ text-align: center;
+ top: 50%;
+ line-height: 1;
+ margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class$="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-disabled [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-disabled [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-readonly [class*="input"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-readonly [class*="input"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-readonly [class$="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-readonly [class$="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well {
+ background: #f5f5f5;
+ color: #454545;
+ -webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well > div > [class*="-caption"] {
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well > .v-margin-top {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well > .v-margin-right {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well > .v-margin-bottom {
+ padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well > .v-margin-left {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card {
+ background: white;
+ color: #474747;
+ border-radius: 4px;
+ border: 1px solid #d5d5d5;
+ -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card > .v-margin-top {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card > .v-margin-right {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card > .v-margin-bottom {
+ padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card > .v-margin-left {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group {
+ white-space: nowrap;
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget ~ .v-widget:not(:last-child) {
+ border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget:last-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-caption:first-child + .v-widget {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget ~ .v-widget.first.first {
+ border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget ~ .v-widget.last.last {
+ border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget {
+ vertical-align: middle;
+ margin-left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget:first-child {
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget:focus, .org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget[class*="focus"], .org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget [class*="focus"] {
+ position: relative;
+ z-index: 5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-form fieldset {
+ border: none;
+ padding: 0;
+ margin: 0;
+ height: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-form-content {
+ height: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="spacing"] > tbody > [class*="row"] > td {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="spacing"] > tbody > [class*="firstrow"] > td {
+ padding-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-top"] > tbody > [class*="firstrow"] > td {
+ padding-top: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-bottom"] > tbody > [class*="lastrow"] > td {
+ padding-bottom: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-left"] > tbody > [class*="row"] > [class*="captioncell"] {
+ padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 {
+ left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] {
+ padding-right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 {
+ right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout > table {
+ border-spacing: 0;
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.v-has-width > table, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.v-has-width .v-formlayout-contentcell {
+ width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-error-indicator {
+ width: 19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell {
+ vertical-align: top;
+ line-height: 36px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell .v-caption {
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell .v-caption-h2, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell .v-caption-h3, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell .v-caption-h4 {
+ height: 3em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell .v-checkbox, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell .v-radiobutton {
+ font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell > .v-label-h4 {
+ position: absolute;
+ left: 0;
+ right: 0;
+ width: auto !important;
+ margin-top: -0.5em;
+ padding-bottom: 0.5em;
+ border-bottom: 1px solid #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table {
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > tr > td {
+ padding-top: 0;
+ height: 37px;
+ border-bottom: 1px solid #eaeaea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="lastrow"] > td {
+ border-bottom: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > tr > [class*="captioncell"] {
+ color: #7d7d7d;
+ text-align: right;
+ padding-left: 13px;
+ line-height: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] {
+ padding-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect-input, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield-textfield {
+ width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 37px;
+ border-radius: 0;
+ padding: 4px 7px;
+
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ background: transparent;
+ border: none;
+ color: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea {
+ line-height: 37px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea:focus {
+ outline: none;
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), none;
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), none;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea:focus {
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield-prompt, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea-prompt, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect-prompt input, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield-prompt input {
+ color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea {
+ height: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 {
+ border-bottom: none;
+ left: 0;
+ right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 {
+ margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-richtextarea {
+ margin: 5px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-filterselect-button, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-datefield-button {
+ border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-filterselect-button:active:after, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-datefield-button:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-datefield-button {
+ right: 0;
+ left: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-checkbox {
+ margin-left: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller {
+ position: absolute;
+ z-index: 1;
+ outline: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-horizontal {
+ left: 0;
+ right: 0;
+ bottom: 0;
+ overflow-y: hidden;
+ -ms-overflow-y: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-vertical {
+ right: 0;
+ top: 0;
+ bottom: 0;
+ overflow-x: hidden;
+ -ms-overflow-x: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-tablewrapper {
+ position: absolute;
+ overflow: hidden;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ z-index: 5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-tablewrapper > table {
+ border-spacing: 0;
+ table-layout: fixed;
+ width: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header-deco, .org_osbee_vaadin_addons_designer_overlay .v-grid-footer-deco {
+ position: absolute;
+ right: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-horizontal-scrollbar-deco {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header, .org_osbee_vaadin_addons_designer_overlay .v-grid-body, .org_osbee_vaadin_addons_designer_overlay .v-grid-footer {
+ position: absolute;
+ left: 0;
+ width: inherit;
+ z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header, .org_osbee_vaadin_addons_designer_overlay .v-grid-header-deco {
+ top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer, .org_osbee_vaadin_addons_designer_overlay .v-grid-footer-deco {
+ bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-body {
+ z-index: 0;
+ top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-body .v-grid-row {
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row {
+ display: block;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-row, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-grid-row {
+ float: left;
+ clear: left;
+ margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row > td, .org_osbee_vaadin_addons_designer_overlay .v-grid-row > th {
+ background-color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row {
+ width: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell {
+ display: block;
+ float: left;
+ padding: 2px;
+ white-space: nowrap;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ font-size: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell.frozen {
+ position: relative;
+ z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer {
+ position: absolute;
+ display: block;
+ background-color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer > td {
+ width: 100%;
+ height: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer {
+ margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-vertical, .org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-horizontal {
+ border: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-vertical {
+ border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-horizontal {
+ border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-tablewrapper {
+ border: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid .header-drag-table {
+ border-spacing: 0;
+ position: relative;
+ table-layout: fixed;
+ width: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid .header-drag-table .v-grid-header {
+ position: absolute;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid .header-drag-table .v-grid-header > .v-grid-cell {
+ border: 1px solid #d4d4d4;
+ margin-top: -10px;
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+ z-index: 30000;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid .header-drag-table .v-grid-header > .v-grid-drop-marker {
+ background-color: #197de1;
+ position: absolute;
+ width: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border-radius: 0;
+ position: absolute;
+ top: 0;
+ right: 0;
+ background-color: #fafafa;
+ border: 1px solid #d4d4d4;
+ padding: 0;
+ z-index: 5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.v-grid-sidebar-popup {
+ right: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button {
+ background: transparent;
+ border: none;
+ color: inherit;
+ cursor: pointer;
+ outline: none;
+ padding: 0 4px;
+ text-align: right;
+ line-height: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button[disabled] {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button::-moz-focus-inner {
+ border: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button:after {
+ content: "\f0c9";
+ display: block;
+ font-family: ThemeIcons, sans-serif;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.closed {
+ border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button {
+ width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button:after {
+ content: "\f0c9";
+ font-size: 14px;
+ line-height: 1;
+}
+
+.v-ie .org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button {
+ vertical-align: middle;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button:after {
+ vertical-align: middle;
+ text-align: center;
+ display: inline;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-content {
+ padding: 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-content .gwt-MenuBar .gwt-MenuItem .column-hiding-toggle {
+ text-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell {
+ background-color: white;
+ padding: 0 18px;
+ line-height: 37px;
+ text-overflow: ellipsis;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell > * {
+ line-height: 1.55;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell > div {
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell.frozen {
+ -webkit-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1);
+ box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1);
+ border-right: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell.frozen + th, .org_osbee_vaadin_addons_designer_overlay .v-grid-cell.frozen + td {
+ border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row > td, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div {
+ border-left: 1px solid #d4d4d4;
+ border-bottom: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row > td:first-child, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div:first-child {
+ border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells.frozen > div {
+ -webkit-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1);
+ box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1);
+ border-right: 1px solid #d4d4d4;
+ border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-stripe > td {
+ background-color: #f5f5f5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-selected > td {
+ background: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-focused > td {
+
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header th {
+ position: relative;
+ background-color: #fafafa;
+ font-size: 14px;
+ font-weight: inherit;
+ border-left: 1px solid #d4d4d4;
+ border-bottom: 1px solid #d4d4d4;
+
+ text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header th:first-child {
+ border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-asc, .org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-desc {
+ padding-right: 35px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-asc:after, .org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-desc:after {
+ font-family: ThemeIcons, sans-serif;
+ content: "\f0de" " " attr(sort-order);
+ position: absolute;
+ right: 18px;
+ font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-desc:after {
+ content: "\f0dd" " " attr(sort-order);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-column-resize-handle {
+ position: absolute;
+ width: 36px;
+ right: -18px;
+ top: 0px;
+ bottom: 0px;
+ cursor: col-resize;
+ z-index: 10;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer td {
+ background-color: #fafafa;
+ font-size: 14px;
+ font-weight: inherit;
+ border-left: 1px solid #d4d4d4;
+ border-top: 1px solid #d4d4d4;
+ border-bottom: none;
+
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer td:first-child {
+ border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .v-grid-cell, .org_osbee_vaadin_addons_designer_overlay .v-grid-footer .v-grid-cell {
+ overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-column-header-content, .org_osbee_vaadin_addons_designer_overlay .v-grid-column-footer-content {
+ width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ line-height: 37px;
+ vertical-align: baseline;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header-deco {
+ border-top: 1px solid #d4d4d4;
+ border-right: 1px solid #d4d4d4;
+ background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer-deco {
+ border-bottom: 1px solid #d4d4d4;
+ border-right: 1px solid #d4d4d4;
+ background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-horizontal-scrollbar-deco {
+ background-color: #fafafa;
+ border: 1px solid #d4d4d4;
+ border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused:before {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border: 2px solid #197de1;
+ display: none;
+ pointer-events: none;
+}
+
+.ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused:before, .ie9 .org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused:before, .ie10 .org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused:before {
+ content: url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid:focus .v-grid-cell-focused:before {
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid.v-disabled:focus .v-grid-cell-focused:before {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor {
+ position: absolute;
+ z-index: 20;
+ overflow: hidden;
+ left: 0;
+ right: 0;
+ border: 1px solid #d4d4d4;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ margin-top: -1px;
+ -webkit-box-shadow: 0 0 9px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 9px rgba(0, 0, 0, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor.unbuffered .v-grid-editor-footer {
+ width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells {
+ position: relative;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells.frozen {
+ z-index: 2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div {
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ vertical-align: middle;
+ background: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div:first-child {
+ border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div > * {
+ vertical-align: middle;
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect {
+ padding-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div input[type="text"], .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div input[type="text"].v-filterselect-input, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div input[type="password"] {
+ padding-left: 18px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div input[type="text"]:not(.v-filterselect-input), .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div input[type="password"] {
+ padding-right: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div input[type="checkbox"] {
+ margin-left: 18px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect {
+ min-width: 100%;
+ max-width: 100%;
+ min-height: 100%;
+ max-height: 100%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield-button {
+ margin-left: -30px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect-button {
+ margin-left: -27px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-select, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-select-select {
+ min-width: 100%;
+ max-width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div.not-editable.v-grid-cell {
+ float: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells .error::before {
+ position: absolute;
+ display: block;
+ height: 0;
+ width: 0;
+ content: "";
+ border-top: 5px solid red;
+ border-right: 5px solid transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells .error, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells .error > input {
+ background-color: #fee;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer {
+ display: table;
+ height: 37px;
+ border-top: 1px solid #d4d4d4;
+ margin-top: -1px;
+ background: white;
+ padding: 0 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer + .v-grid-editor-cells > div {
+ border-bottom: none;
+ border-top: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer:first-child {
+ border-top: none;
+ margin-top: 0;
+ border-bottom: 1px solid #d4d4d4;
+ margin-bottom: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-message, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-buttons {
+ display: table-cell;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-message {
+ width: 100%;
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-message > div {
+ position: absolute;
+ width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ line-height: 37px;
+ top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-save {
+ margin-right: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer {
+ padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer > td {
+ display: block;
+ padding: 0;
+ background-color: white;
+ border-top: 1px solid #eeeeee;
+ border-bottom: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer.stripe > td {
+ background-color: #f5f5f5;
+ border-top: 1px solid #e5e5e5;
+ border-bottom: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco-container {
+ border-top: 1px solid transparent;
+ position: relative;
+ top: 0;
+ z-index: 5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco {
+ top: 0;
+ left: 0;
+ width: 2px;
+ background-color: #197de1;
+ position: absolute;
+ height: 100%;
+ pointer-events: none;
+}
+
+.ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco:before, .ie9 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco:before, .ie10 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco:before {
+ content: url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell > .v-progressbar {
+ width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid {
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .v-grid-cell {
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .v-grid-cell.dragged {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+ -webkit-transition: opacity 0.3s ease-in-out;
+ -moz-transition: opacity 0.3s ease-in-out;
+ transition: opacity 0.3s ease-in-out;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .v-grid-cell.dragged-column-header {
+ margin-top: -19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer .v-grid-cell {
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header-deco {
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer-deco, .org_osbee_vaadin_addons_designer_overlay .v-grid-horizontal-scrollbar-deco {
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-selected > .v-grid-cell {
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ color: #c8dbed;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+ border-color: #1d69b4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-selected > .v-grid-cell-focused:before {
+ border-color: #71b0ef;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor {
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer {
+ font-size: 14px;
+ padding: 0 6px;
+ background: #fafafa;
+ -webkit-animation: valo-grid-editor-footer-animate-in 200ms 120ms backwards;
+ -moz-animation: valo-grid-editor-footer-animate-in 200ms 120ms backwards;
+ animation: valo-grid-editor-footer-animate-in 200ms 120ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer:first-child {
+ -webkit-animation: valo-grid-editor-footer-animate-in-alt 200ms 120ms backwards;
+ -moz-animation: valo-grid-editor-footer-animate-in-alt 200ms 120ms backwards;
+ animation: valo-grid-editor-footer-animate-in-alt 200ms 120ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells {
+ z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div:before {
+ content: "";
+ display: inline-block;
+ height: 100%;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div.not-editable.v-grid-cell {
+ float: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .error::before {
+ border-top: 9px solid #ed473b;
+ border-right: 9px solid transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .error, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .error > input {
+ background-color: #fffbfb;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-textfield-focus, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield .v-textfield-focus, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect-input, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect-input:focus {
+ border: none;
+ border-radius: 0;
+ background: transparent;
+ -webkit-box-shadow: inset 0 1px 0 #f2f2f2;
+ box-shadow: inset 0 1px 0 #f2f2f2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div input[type="text"].v-datefield-textfield {
+ padding-left: 44.4px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield-button {
+ margin-left: 0px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect-button {
+ margin-left: 0px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-textfield-focus, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield .v-textfield-focus, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect-input:focus {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-select {
+ padding-left: 9px;
+ padding-right: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-checkbox {
+ margin: 0 9px 0 18px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-checkbox > input[type="checkbox"] {
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-checkbox > label {
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-message > div:before {
+ display: inline-block;
+ color: #ed473b;
+ font-weight: 600;
+ width: 19px;
+ text-align: center;
+ content: "!";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-save, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cancel {
+ cursor: pointer;
+ color: #197de1;
+ text-decoration: underline;
+ font-weight: inherit;
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+ font-weight: 400;
+ text-decoration: none;
+ border: none;
+ background: transparent;
+ padding: 6px 6px;
+ margin: 0;
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-save:hover, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cancel:hover {
+ color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-save.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cancel.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer {
+ margin-top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-content {
+ margin: 0 0 2px;
+ padding: 4px 4px 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.closed {
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller::-webkit-scrollbar {
+ border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller::-webkit-scrollbar-thumb {
+ border-radius: 10px;
+ border: 4px solid transparent;
+ background: rgba(0, 0, 0, 0.3);
+ -webkit-background-clip: content-box;
+ background-clip: content-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-vertical::-webkit-scrollbar-thumb {
+ min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-horizontal::-webkit-scrollbar-thumb {
+ min-width: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 37px;
+ border-radius: 4px;
+ padding: 4px 9px;
+ border: 1px solid #c5c5c5;
+ background: white;
+ color: #474747;
+ -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ width: 185px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield {
+ line-height: 37px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield:focus {
+ outline: none;
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield[class*="prompt"] {
+ color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-readonly {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-readonly:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-error {
+ border-color: #ed473b !important;
+ background: #fffbfb;
+ color: #6c2621;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-borderless {
+ border: none;
+ border-radius: 0;
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-borderless:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-borderless[class*="prompt"] {
+ color: inherit;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-tiny {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 28px;
+ border-radius: 4px;
+ padding: 3px 7px;
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ font-size: 12px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-tiny, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-tiny {
+ line-height: 28px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-compact, .org_osbee_vaadin_addons_designer_overlay .v-textfield-small {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 31px;
+ border-radius: 4px;
+ padding: 3px 8px;
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-compact, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-compact, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-small, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-small {
+ line-height: 31px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-small {
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-large {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 44px;
+ border-radius: 4px;
+ padding: 5px 10px;
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ font-size: 20px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-large, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-large {
+ line-height: 44px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-huge {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 59px;
+ border-radius: 4px;
+ padding: 7px 12px;
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ font-size: 26px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-huge, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-huge {
+ line-height: 59px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon {
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon .v-captiontext {
+ font-size: 14px;
+ font-weight: 400;
+ padding-bottom: 0.3em;
+ padding-left: 1px;
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon .v-icon {
+ position: absolute;
+ z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon span.v-icon {
+ left: 1px;
+ bottom: 1px;
+ width: 37px;
+ line-height: 35px;
+ text-align: center;
+ font-size: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon img.v-icon {
+ left: 11px;
+ bottom: 11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon {
+ padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-tiny {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny {
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny .v-captiontext {
+ font-size: 14px;
+ font-weight: 400;
+ padding-bottom: 0.3em;
+ padding-left: 1px;
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny .v-icon {
+ position: absolute;
+ z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny span.v-icon {
+ left: 1px;
+ bottom: 1px;
+ width: 28px;
+ line-height: 26px;
+ text-align: center;
+ font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny img.v-icon {
+ left: 6px;
+ bottom: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-tiny {
+ padding-left: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-compact {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact {
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact .v-captiontext {
+ font-size: 14px;
+ font-weight: 400;
+ padding-bottom: 0.3em;
+ padding-left: 1px;
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact .v-icon {
+ position: absolute;
+ z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact span.v-icon {
+ left: 1px;
+ bottom: 1px;
+ width: 31px;
+ line-height: 29px;
+ text-align: center;
+ font-size: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact img.v-icon {
+ left: 8px;
+ bottom: 8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-compact {
+ padding-left: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-small {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small {
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small .v-captiontext {
+ font-size: 14px;
+ font-weight: 400;
+ padding-bottom: 0.3em;
+ padding-left: 1px;
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small .v-icon {
+ position: absolute;
+ z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small span.v-icon {
+ left: 1px;
+ bottom: 1px;
+ width: 31px;
+ line-height: 29px;
+ text-align: center;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small img.v-icon {
+ left: 8px;
+ bottom: 8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-small {
+ padding-left: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-large {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large {
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large .v-captiontext {
+ font-size: 14px;
+ font-weight: 400;
+ padding-bottom: 0.3em;
+ padding-left: 1px;
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large .v-icon {
+ position: absolute;
+ z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large span.v-icon {
+ left: 1px;
+ bottom: 1px;
+ width: 44px;
+ line-height: 42px;
+ text-align: center;
+ font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large img.v-icon {
+ left: 14px;
+ bottom: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-large {
+ padding-left: 44px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-huge {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge {
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge .v-captiontext {
+ font-size: 14px;
+ font-weight: 400;
+ padding-bottom: 0.3em;
+ padding-left: 1px;
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge .v-icon {
+ position: absolute;
+ z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge span.v-icon {
+ left: 1px;
+ bottom: 1px;
+ width: 59px;
+ line-height: 57px;
+ text-align: center;
+ font-size: 26px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge img.v-icon {
+ left: 22px;
+ bottom: 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-huge {
+ padding-left: 59px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-align-right {
+ text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-align-center {
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 37px;
+ border-radius: 4px;
+ padding: 6px;
+ border: 1px solid #c5c5c5;
+ background: white;
+ color: #474747;
+ -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ height: auto;
+ resize: none;
+ white-space: pre-wrap;
+ width: 185px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea {
+ line-height: 37px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea:focus {
+ outline: none;
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea[class*="prompt"] {
+ color: #a3a3a3;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea {
+ line-height: inherit;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-readonly {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-readonly:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-error {
+ border-color: #ed473b !important;
+ background: #fffbfb;
+ color: #6c2621;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-borderless {
+ border: none;
+ border-radius: 0;
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-borderless:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-borderless[class*="prompt"] {
+ color: inherit;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 28px;
+ border-radius: 4px;
+ padding: 6px;
+
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ height: auto;
+ resize: none;
+ white-space: pre-wrap;
+ font-size: 12px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny {
+ line-height: 28px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny {
+ line-height: inherit;
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-small {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 31px;
+ border-radius: 4px;
+ padding: 6px;
+
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ height: auto;
+ resize: none;
+ white-space: pre-wrap;
+ font-size: 14px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-small, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-small {
+ line-height: 31px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-small, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-small {
+ line-height: inherit;
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-large {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 44px;
+ border-radius: 4px;
+ padding: 6px;
+
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ height: auto;
+ resize: none;
+ white-space: pre-wrap;
+ font-size: 20px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-large, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-large {
+ line-height: 44px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-large, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-large {
+ line-height: inherit;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-huge {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 59px;
+ border-radius: 4px;
+ padding: 6px;
+
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ height: auto;
+ resize: none;
+ white-space: pre-wrap;
+ font-size: 26px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-huge, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-huge {
+ line-height: 59px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-huge, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-huge {
+ line-height: inherit;
+ padding-top: 7px;
+ padding-bottom: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-align-right {
+ text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-align-center {
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield {
+ position: relative;
+ width: 185px;
+ height: 37px;
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 37px;
+ border-radius: 4px;
+ padding: 4px 9px;
+ border: 1px solid #c5c5c5;
+ background: white;
+ color: #474747;
+ -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ padding-left: 44.4px;
+ width: 100%;
+ height: 100%;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"] {
+ line-height: 37px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"].v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"]:focus {
+ outline: none;
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"][class*="prompt"] {
+ color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield[class*="prompt"] > [class*="textfield"] {
+ color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ -webkit-appearance: none;
+ background: transparent;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+ width: 37px;
+ line-height: 35px;
+ text-align: center;
+ font: inherit;
+ outline: none;
+ margin: 0;
+ top: 1px;
+ bottom: 1px;
+ left: 1px;
+ border: none;
+ border-right: 1px solid #e4e4e4;
+ color: #a3a3a3;
+ border-radius: 3px 0 0 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="button"]:hover {
+ color: #474747;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f073";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: rgba(128, 128, 128, 0.2);
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-disabled [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-disabled [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-readonly [class*="textfield"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-readonly [class*="textfield"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-readonly [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-readonly [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-error .v-datefield-textfield {
+ border-color: #ed473b !important;
+ background: #fffbfb;
+ color: #6c2621;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-error .v-datefield-button {
+ color: #ed473b;
+ border-color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-full {
+ width: 240px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-day {
+ width: 185px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-month {
+ width: 120px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-year {
+ width: 104px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup {
+ padding: 4px 4px;
+ border-radius: 4px;
+ background-color: white;
+ color: #474747;
+ -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ -webkit-backface-visibility: hidden;
+ -moz-backface-visibility: hidden;
+ -ms-backface-visibility: hidden;
+ backface-visibility: hidden;
+ margin-top: 5px !important;
+ margin-bottom: 5px !important;
+ margin-right: 5px !important;
+ cursor: default;
+ width: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup[class*="animate-in"] {
+ -webkit-animation: valo-overlay-animate-in 120ms;
+ -moz-animation: valo-overlay-animate-in 120ms;
+ animation: valo-overlay-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup[class*="animate-out"] {
+ -webkit-animation: valo-animate-out-fade 120ms;
+ -moz-animation: valo-animate-out-fade 120ms;
+ animation: valo-animate-out-fade 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin: 0 auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td {
+ padding: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel {
+ font-size: 16px;
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 30px;
+ height: 26px;
+ border: 1px solid transparent;
+ line-height: 26px;
+ text-align: center;
+ font-size: 14px;
+ background: #fafafa;
+ border-radius: 2px;
+ -webkit-transition: color 200ms;
+ -moz-transition: color 200ms;
+ transition: color 200ms;
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day:hover {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day-offmonth {
+ color: #a0a0a0;
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day-today {
+ color: #191919;
+ font-weight: 600;
+ border-color: #afafaf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected:hover {
+ color: #c8dbed;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ border: none;
+ font-weight: 600;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused {
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ position: relative;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused {
+ border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range:hover {
+ color: #a0a0a0;
+ cursor: not-allowed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weekdays {
+ height: 26px;
+ color: rgba(133, 133, 133, 0.85);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weekdays strong {
+ font: inherit;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-header {
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ border: none;
+ background: transparent;
+ padding: 0;
+ margin: 0;
+ cursor: pointer;
+ color: transparent;
+ font-size: 0;
+ width: 19px;
+ height: 25px;
+ outline: none;
+ position: relative;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button:before, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button:before {
+ color: #a0a0a0;
+ font-size: 21px;
+ line-height: 24px;
+ -webkit-transition: color 200ms;
+ -moz-transition: color 200ms;
+ transition: color 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button:hover:before, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button:hover:before {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button.outside-range, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button.outside-range {
+ cursor: default;
+ opacity: 0.3;
+ filter: alpha(opacity=30.0) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button.outside-range:hover:before, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button.outside-range:hover:before {
+ color: #a0a0a0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-button-prevyear:before {
+ font-family: ThemeIcons;
+ content: "\f100";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-button-prevmonth:before {
+ font-family: ThemeIcons;
+ content: "\f104";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-button-nextyear:before {
+ font-family: ThemeIcons;
+ content: "\f101";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-button-nextmonth:before {
+ font-family: ThemeIcons;
+ content: "\f105";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td.v-datefield-calendarpanel-month {
+ width: 148px;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-year td.v-datefield-calendarpanel-month {
+ width: 74px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weeknumber, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weekdays.v-datefield-calendarpanel-weeknumbers td:first-child {
+ width: 30px;
+ color: rgba(133, 133, 133, 0.85);
+ font-size: 14px;
+ display: inline-block;
+ text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weeknumber {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weeknumbers .v-first:before {
+ content: "";
+ position: absolute;
+ top: 38px;
+ bottom: 0;
+ left: 0;
+ width: 34px;
+ border-top: 1px solid #eaeaea;
+ border-right: 1px solid #eaeaea;
+ border-top-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+ background: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td.v-datefield-calendarpanel-time {
+ width: 100%;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td.v-datefield-calendarpanel-time .v-label {
+ display: inline;
+ margin: 0 0.1em;
+ font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel {
+ font-size: 16px;
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 30px;
+ height: 26px;
+ border: 1px solid transparent;
+ line-height: 26px;
+ text-align: center;
+ font-size: 14px;
+ background: #fafafa;
+ border-radius: 2px;
+ -webkit-transition: color 200ms;
+ -moz-transition: color 200ms;
+ transition: color 200ms;
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day:hover {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day-offmonth {
+ color: #a0a0a0;
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day-today {
+ color: #191919;
+ font-weight: 600;
+ border-color: #afafaf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected, .org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected:hover {
+ color: #c8dbed;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ border: none;
+ font-weight: 600;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused {
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ position: relative;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused {
+ border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range, .org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range:hover {
+ color: #a0a0a0;
+ cursor: not-allowed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weekdays {
+ height: 26px;
+ color: rgba(133, 133, 133, 0.85);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weekdays strong {
+ font: inherit;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-header {
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ border: none;
+ background: transparent;
+ padding: 0;
+ margin: 0;
+ cursor: pointer;
+ color: transparent;
+ font-size: 0;
+ width: 19px;
+ height: 25px;
+ outline: none;
+ position: relative;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button:before {
+ color: #a0a0a0;
+ font-size: 21px;
+ line-height: 24px;
+ -webkit-transition: color 200ms;
+ -moz-transition: color 200ms;
+ transition: color 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button:hover:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button:hover:before {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button.outside-range, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button.outside-range {
+ cursor: default;
+ opacity: 0.3;
+ filter: alpha(opacity=30.0) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button.outside-range:hover:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button.outside-range:hover:before {
+ color: #a0a0a0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-prevyear:before {
+ font-family: ThemeIcons;
+ content: "\f100";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-prevmonth:before {
+ font-family: ThemeIcons;
+ content: "\f104";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-nextyear:before {
+ font-family: ThemeIcons;
+ content: "\f101";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-nextmonth:before {
+ font-family: ThemeIcons;
+ content: "\f105";
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-datefield-calendarpanel-month {
+ width: 148px;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-year td.v-datefield-calendarpanel-month {
+ width: 74px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weeknumber, .org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weekdays.v-datefield-calendarpanel-weeknumbers td:first-child {
+ width: 30px;
+ color: rgba(133, 133, 133, 0.85);
+ font-size: 14px;
+ display: inline-block;
+ text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weeknumber {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weeknumbers .v-first:before {
+ content: "";
+ position: absolute;
+ top: 38px;
+ bottom: 0;
+ left: 0;
+ width: 34px;
+ border-top: 1px solid #eaeaea;
+ border-right: 1px solid #eaeaea;
+ border-top-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+ background: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-datefield-calendarpanel-time {
+ width: 100%;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-datefield-calendarpanel-time .v-label {
+ display: inline;
+ margin: 0 0.1em;
+ font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-borderless .v-datefield-textfield {
+ border: none;
+ border-radius: 0;
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-borderless .v-datefield-textfield:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-borderless .v-datefield-textfield[class*="prompt"] {
+ color: inherit;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-borderless .v-datefield-button {
+ border: none;
+ color: inherit;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-align-right input {
+ text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-align-center input {
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny {
+ height: 28px;
+ border-radius: 4px;
+ font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="textfield"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 28px;
+ border-radius: 4px;
+ padding: 3px 7px;
+
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ padding-left: 33.6px;
+ width: 100%;
+ height: 100%;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="textfield"] {
+ line-height: 28px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ -webkit-appearance: none;
+ background: transparent;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+ width: 28px;
+ line-height: 28px;
+ text-align: center;
+ font: inherit;
+ outline: none;
+ margin: 0;
+ border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f073";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-disabled [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-disabled [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-readonly [class*="textfield"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-readonly [class*="textfield"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-readonly [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-readonly [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small {
+ height: 31px;
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="textfield"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="textfield"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 31px;
+ border-radius: 4px;
+ padding: 3px 8px;
+
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ padding-left: 37.2px;
+ width: 100%;
+ height: 100%;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="textfield"], .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="textfield"] {
+ line-height: 31px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="button"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ -webkit-appearance: none;
+ background: transparent;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+ width: 31px;
+ line-height: 31px;
+ text-align: center;
+ font: inherit;
+ outline: none;
+ margin: 0;
+ border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="button"]:before, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f073";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-disabled [class*="button"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-disabled [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-disabled [class*="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-disabled [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-readonly [class*="textfield"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-readonly [class*="textfield"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-readonly [class*="textfield"]:focus, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-readonly [class*="textfield"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-readonly [class*="button"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-readonly [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-readonly [class*="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-readonly [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-small {
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large {
+ height: 44px;
+ border-radius: 4px;
+ font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="textfield"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 44px;
+ border-radius: 4px;
+ padding: 5px 10px;
+
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ padding-left: 52.8px;
+ width: 100%;
+ height: 100%;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="textfield"] {
+ line-height: 44px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ -webkit-appearance: none;
+ background: transparent;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+ width: 44px;
+ line-height: 44px;
+ text-align: center;
+ font: inherit;
+ outline: none;
+ margin: 0;
+ border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f073";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-disabled [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-disabled [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-readonly [class*="textfield"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-readonly [class*="textfield"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-readonly [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-readonly [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge {
+ height: 59px;
+ border-radius: 4px;
+ font-size: 26px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="textfield"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 59px;
+ border-radius: 4px;
+ padding: 7px 12px;
+
+
+
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ padding-left: 70.8px;
+ width: 100%;
+ height: 100%;
+ border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="textfield"] {
+ line-height: 59px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="button"] {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ -webkit-appearance: none;
+ background: transparent;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+ width: 59px;
+ line-height: 59px;
+ text-align: center;
+ font: inherit;
+ outline: none;
+ margin: 0;
+ border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="button"]:before {
+ font-family: ThemeIcons;
+ content: "\f073";
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="button"]:active:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-disabled [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-disabled [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-readonly [class*="textfield"] {
+ background: #fafafa;
+ color: #464646;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-readonly [class*="textfield"]:focus {
+ box-shadow: none;
+ border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-readonly [class*="button"] {
+ cursor: default;
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-readonly [class*="button"]:active:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel {
+ font-size: 16px;
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 30px;
+ height: 26px;
+ border: 1px solid transparent;
+ line-height: 26px;
+ text-align: center;
+ font-size: 14px;
+ background: #fafafa;
+ border-radius: 2px;
+ -webkit-transition: color 200ms;
+ -moz-transition: color 200ms;
+ transition: color 200ms;
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day:hover {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day-offmonth {
+ color: #a0a0a0;
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day-today {
+ color: #191919;
+ font-weight: 600;
+ border-color: #afafaf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-selected, .org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-selected:hover {
+ color: #c8dbed;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ border: none;
+ font-weight: 600;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-focused {
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ position: relative;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-focused {
+ border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-outside-range, .org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-outside-range:hover {
+ color: #a0a0a0;
+ cursor: not-allowed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weekdays {
+ height: 26px;
+ color: rgba(133, 133, 133, 0.85);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weekdays strong {
+ font: inherit;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-header {
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ border: none;
+ background: transparent;
+ padding: 0;
+ margin: 0;
+ cursor: pointer;
+ color: transparent;
+ font-size: 0;
+ width: 19px;
+ height: 25px;
+ outline: none;
+ position: relative;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button:before {
+ color: #a0a0a0;
+ font-size: 21px;
+ line-height: 24px;
+ -webkit-transition: color 200ms;
+ -moz-transition: color 200ms;
+ transition: color 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button:hover:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button:hover:before {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button.outside-range, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button.outside-range {
+ cursor: default;
+ opacity: 0.3;
+ filter: alpha(opacity=30.0) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button.outside-range:hover:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button.outside-range:hover:before {
+ color: #a0a0a0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-prevyear:before {
+ font-family: ThemeIcons;
+ content: "\f100";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-prevmonth:before {
+ font-family: ThemeIcons;
+ content: "\f104";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-nextyear:before {
+ font-family: ThemeIcons;
+ content: "\f101";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-nextmonth:before {
+ font-family: ThemeIcons;
+ content: "\f105";
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-inline-datefield-calendarpanel-month {
+ width: 148px;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-year td.v-inline-datefield-calendarpanel-month {
+ width: 74px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weeknumber, .org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weekdays.v-inline-datefield-calendarpanel-weeknumbers td:first-child {
+ width: 30px;
+ color: rgba(133, 133, 133, 0.85);
+ font-size: 14px;
+ display: inline-block;
+ text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weeknumber {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weeknumbers .v-first:before {
+ content: "";
+ position: absolute;
+ top: 38px;
+ bottom: 0;
+ left: 0;
+ width: 34px;
+ border-top: 1px solid #eaeaea;
+ border-right: 1px solid #eaeaea;
+ border-top-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+ background: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-inline-datefield-calendarpanel-time {
+ width: 100%;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-inline-datefield-calendarpanel-time .v-label {
+ display: inline;
+ margin: 0 0.1em;
+ font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel {
+ position: relative;
+ background: white;
+ padding: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-margin-top {
+ padding-top: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-margin-bottom {
+ padding-bottom: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-margin-left {
+ padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-margin-right {
+ padding-right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-spacing-on {
+ padding-left: 12px;
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar {
+ position: relative;
+ text-align: center;
+ white-space: nowrap;
+ outline: none;
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ height: 37px;
+ padding: 0 16px;
+ color: #191919;
+ font-weight: 400;
+
+ cursor: default;
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ padding: 0;
+ text-align: left;
+ line-height: 35px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:focus:after {
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar.v-disabled:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:focus:after {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem {
+ padding: 0 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem[class*="-icon-only"] {
+ width: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:active:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem {
+ position: relative;
+ z-index: 1;
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ height: 37px;
+ padding: 0 15px;
+ color: inherit;
+ font-weight: 400;
+
+ cursor: pointer;
+ border-radius: 0;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border-width: 0 1px 0 0;
+ border-color: inherit;
+ height: 100%;
+ line-height: inherit;
+ vertical-align: top;
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:first-child {
+ border-left-width: 0;
+ border-radius: 3px 0 0 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:last-child {
+ border-radius: 0 3px 3px 0;
+ border-right-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:first-child:last-child {
+ border-radius: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:before {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:hover {
+ zoom: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:hover:before {
+ background-color: rgba(186, 186, 186, 0.1);
+ border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:active:before {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem .v-icon {
+ margin: 0 4px 0 -4px;
+ cursor: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem[class*="-icon-only"] {
+ width: 37px;
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem[class*="-icon-only"] .v-icon {
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-checked {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background-color: #ededed;
+ background-image: -webkit-linear-gradient(bottom, #ededed 2%, #e9e9e9 98%);
+ background-image: linear-gradient(to top,#ededed 2%, #e9e9e9 98%);
+ color: #181818;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-disabled > .v-menubar-menuitem, .org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-disabled {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-disabled > .v-menubar-menuitem:before, .org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-disabled:before {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-menuitem-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-selected {
+ color: #ecf2f8;
+
+
+
+ border-radius: 0;
+ border: 1px solid #1362b1;
+ border-top-color: #156ab3;
+ border-bottom-color: #1156a8;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ -webkit-box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca;
+ box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+ border-top-width: 0;
+ border-left-width: 0;
+ border-bottom-width: 0;
+ z-index: 2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-selected:hover:before {
+ background: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar .v-menubar-submenu-indicator {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar .v-menubar-submenu-indicator + .v-menubar-menuitem-caption:after {
+ font-family: ThemeIcons;
+ content: "\f078";
+ font-size: 0.7em;
+ vertical-align: 0.15em;
+ margin: 0 -0.2em 0 0.5em;
+ opacity: 0.5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar .v-menubar-submenu-indicator + .v-menubar-menuitem-caption:empty:after {
+ margin-left: -0.2em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup {
+ padding: 4px 4px;
+ border-radius: 4px;
+ background-color: white;
+ color: #474747;
+ -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ -webkit-backface-visibility: hidden;
+ -moz-backface-visibility: hidden;
+ -ms-backface-visibility: hidden;
+ backface-visibility: hidden;
+ padding: 4px 4px;
+ margin: 5px 0 0 1px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup[class*="animate-in"] {
+ -webkit-animation: valo-overlay-animate-in 120ms;
+ -moz-animation: valo-overlay-animate-in 120ms;
+ animation: valo-overlay-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup[class*="animate-out"] {
+ -webkit-animation: valo-animate-out-fade 120ms;
+ -moz-animation: valo-animate-out-fade 120ms;
+ animation: valo-animate-out-fade 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-submenu {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-menuitem {
+ display: block;
+ cursor: pointer;
+ line-height: 27px;
+ padding: 0 20px 0 10px;
+ border-radius: 3px;
+ font-weight: 400;
+ white-space: nowrap;
+ position: relative;
+ padding-left: 32px;
+ padding-right: 37px;
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-menuitem:active:before {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background: #0957a6;
+ opacity: 0.15;
+ filter: alpha(opacity=15.0) ;
+ pointer-events: none;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-menuitem .v-icon {
+ max-height: 27px;
+ margin-right: 5px;
+ min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-submenu-indicator {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-submenu-indicator + .v-menubar-menuitem-caption:after {
+ position: absolute;
+ right: 10px;
+ font-family: ThemeIcons;
+ content: "\f054";
+ line-height: 29px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-menuitem-selected {
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ color: #ecf2f8;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-separator {
+ display: block;
+ margin: 4px 0;
+ height: 0;
+ overflow: hidden;
+ border-bottom: 1px solid #e4e4e4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup [class*="checked"] .v-menubar-menuitem-caption:before {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ position: absolute;
+ left: 10px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup [class*="unchecked"] .v-menubar-menuitem-caption:before {
+ content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup [class*="disabled"] {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-small {
+ height: 31px;
+ padding: 0 14px;
+
+ font-weight: 400;
+
+ cursor: default;
+ border-radius: 4px;
+ padding: 0;
+ text-align: left;
+ line-height: 29px;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-small:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-small > .v-menubar-menuitem {
+ padding: 0 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-small > .v-menubar-menuitem[class*="-icon-only"] {
+ width: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless {
+ border: none;
+ border-radius: 0;
+ padding: 1px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ text-shadow: none;
+ background: transparent;
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless:focus:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border: none;
+ margin-right: 1px;
+ border-radius: 4px;
+ color: #197de1;
+ padding: 0 12px;
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:first-child, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:last-child, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:first-child:last-child {
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:before {
+ content: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:hover {
+ color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:active {
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-checked, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-checked:first-child {
+ border: 1px solid #c5c5c5;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-checked .v-menubar-menuitem-caption, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-checked:first-child .v-menubar-menuitem-caption {
+ position: relative;
+ top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-selected {
+ color: #ecf2f8;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-selected:hover {
+ color: #ecf2f8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-disabled, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-disabled:hover {
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton {
+ position: relative;
+ line-height: 19px;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-has-width label {
+ white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton {
+ padding-left: 25px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton label {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ left: 0.2em;
+ top: 0.2em;
+ z-index: 0;
+ margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input:focus ~ label:before {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:after {
+ content: "";
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 19px;
+ height: 19px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 4px;
+ font-size: 13px;
+ text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:before {
+ height: 18.5px;
+ padding: 0 9px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ padding: 0;
+ height: 19px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:after {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ color: transparent;
+ -webkit-transition: color 100ms;
+ -moz-transition: color 100ms;
+ transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input:active ~ label:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input:checked ~ label:after {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > label .v-icon {
+ margin: 0 6px 0 3px;
+ min-width: 1em;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-disabled > label, .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-disabled > .v-icon {
+ cursor: default;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-disabled > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-disabled > input:active ~ label:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly > label, .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly > .v-icon {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly > input:active ~ label:after {
+ background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly > input ~ label:after {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input:checked ~ label:after {
+ width: 7px;
+ height: 7px;
+ top: 6px;
+ left: 6px;
+ background: #197de1;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:after {
+ border-radius: 50%;
+ content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-radiobutton, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-checkbox {
+ display: block;
+ margin: 9px 16px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-radiobutton:first-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-checkbox:first-child {
+ margin-top: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-radiobutton:last-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-checkbox:last-child {
+ margin-bottom: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup.v-has-width label {
+ white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small {
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox {
+ position: relative;
+ line-height: 16px;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-has-width label {
+ white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox {
+ padding-left: 21px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox label {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ left: 0.2em;
+ top: 0.2em;
+ z-index: 0;
+ margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input:focus ~ label:before {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input ~ label:after {
+ content: "";
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 4px;
+ font-size: 11px;
+ text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input ~ label:before {
+ height: 15.5px;
+ padding: 0 7px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ padding: 0;
+ height: 16px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input ~ label:after {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ color: transparent;
+ -webkit-transition: color 100ms;
+ -moz-transition: color 100ms;
+ transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input:active ~ label:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input:checked ~ label:after {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > label .v-icon {
+ margin: 0 5px 0 3px;
+ min-width: 1em;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-disabled > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-disabled > .v-icon {
+ cursor: default;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-disabled > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-disabled > input:active ~ label:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly > .v-icon {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly > input:active ~ label:after {
+ background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly > input ~ label:after {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton {
+ position: relative;
+ line-height: 16px;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-has-width label {
+ white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton {
+ padding-left: 21px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton label {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ left: 0.2em;
+ top: 0.2em;
+ z-index: 0;
+ margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input:focus ~ label:before {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:after {
+ content: "";
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 4px;
+ font-size: 11px;
+ text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:before {
+ height: 15.5px;
+ padding: 0 7px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ padding: 0;
+ height: 16px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:after {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ color: transparent;
+ -webkit-transition: color 100ms;
+ -moz-transition: color 100ms;
+ transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input:active ~ label:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input:checked ~ label:after {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > label .v-icon {
+ margin: 0 5px 0 3px;
+ min-width: 1em;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-disabled > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-disabled > .v-icon {
+ cursor: default;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-disabled > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-disabled > input:active ~ label:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly > .v-icon {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly > input:active ~ label:after {
+ background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly > input ~ label:after {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input:checked ~ label:after {
+ width: 6px;
+ height: 6px;
+ top: 5px;
+ left: 5px;
+ background: #197de1;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:after {
+ border-radius: 50%;
+ content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox {
+ display: block;
+ margin: 8px 16px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton:first-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox:first-child {
+ margin-top: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton:last-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox:last-child {
+ margin-bottom: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small.v-has-width label {
+ white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large {
+ font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox {
+ position: relative;
+ line-height: 22px;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-has-width label {
+ white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox {
+ padding-left: 29px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox label {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ left: 0.2em;
+ top: 0.2em;
+ z-index: 0;
+ margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input:focus ~ label:before {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input ~ label:after {
+ content: "";
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 22px;
+ height: 22px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 4px;
+ font-size: 15px;
+ text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input ~ label:before {
+ height: 22px;
+ padding: 0 10px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ padding: 0;
+ height: 22px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input ~ label:after {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ color: transparent;
+ -webkit-transition: color 100ms;
+ -moz-transition: color 100ms;
+ transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input:active ~ label:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input:checked ~ label:after {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > label .v-icon {
+ margin: 0 7px 0 4px;
+ min-width: 1em;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-disabled > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-disabled > .v-icon {
+ cursor: default;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-disabled > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-disabled > input:active ~ label:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly > .v-icon {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly > input:active ~ label:after {
+ background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly > input ~ label:after {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton {
+ position: relative;
+ line-height: 22px;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-has-width label {
+ white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton {
+ padding-left: 29px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton label {
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ cursor: pointer;
+ display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ left: 0.2em;
+ top: 0.2em;
+ z-index: 0;
+ margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input:focus ~ label:before {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:after {
+ content: "";
+ display: inline-block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 22px;
+ height: 22px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 4px;
+ font-size: 15px;
+ text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:before {
+ height: 22px;
+ padding: 0 10px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ padding: 0;
+ height: 22px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:after {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ color: transparent;
+ -webkit-transition: color 100ms;
+ -moz-transition: color 100ms;
+ transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input:active ~ label:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input:checked ~ label:after {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > label .v-icon {
+ margin: 0 7px 0 4px;
+ min-width: 1em;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-disabled > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-disabled > .v-icon {
+ cursor: default;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-disabled > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-disabled > input:active ~ label:after {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly > .v-icon {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly > label > .v-icon {
+ cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly > input:active ~ label:after {
+ background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly > input ~ label:after {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input:checked ~ label:after {
+ width: 8px;
+ height: 8px;
+ top: 7px;
+ left: 7px;
+ background: #197de1;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:after {
+ border-radius: 50%;
+ content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox {
+ display: block;
+ margin: 11px 16px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton:first-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox:first-child {
+ margin-top: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton:last-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox:last-child {
+ margin-bottom: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large.v-has-width label {
+ white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal {
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal .v-radiobutton, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal .v-checkbox {
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal.v-has-width {
+ white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal.v-has-width label {
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link {
+ cursor: pointer;
+ color: #197de1;
+ text-decoration: underline;
+ font-weight: inherit;
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link:hover {
+ color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link a {
+ cursor: inherit;
+ color: inherit;
+ text-decoration: inherit;
+ -webkit-transition: inherit;
+ -moz-transition: inherit;
+ transition: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link .v-icon {
+ cursor: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link-small {
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link-large {
+ font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window {
+ padding: 4px 4px;
+ border-radius: 4px;
+ background-color: white;
+ color: #474747;
+ -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ -webkit-backface-visibility: hidden;
+ -moz-backface-visibility: hidden;
+ -ms-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1), 0 16px 80px -6px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1), 0 16px 80px -6px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ padding: 0;
+ min-width: 148px !important;
+ min-height: 37px !important;
+ white-space: nowrap;
+ overflow: hidden !important;
+ -webkit-transition: width 200ms, height 200ms, top 200ms, left 200ms;
+ -moz-transition: width 200ms, height 200ms, top 200ms, left 200ms;
+ transition: width 200ms, height 200ms, top 200ms, left 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window[class*="animate-in"] {
+ -webkit-animation: valo-animate-in-fade 140ms;
+ -moz-animation: valo-animate-in-fade 140ms;
+ animation: valo-animate-in-fade 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window[class*="animate-out"] {
+ -webkit-animation: valo-animate-out-scale-down-fade 100ms;
+ -moz-animation: valo-animate-out-scale-down-fade 100ms;
+ animation: valo-animate-out-scale-down-fade 100ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window.v-window-animate-in {
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-modalitycurtain {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: #222;
+ background-image: -webkit-radial-gradient(50% 50%, circle, #222, #0e0e0e);
+ background-image: radial-gradient( circle at 50% 50%, #222, #0e0e0e);
+ opacity: 0.72;
+ filter: alpha(opacity=72) ;
+ -webkit-animation: valo-animate-in-fade 400ms 100ms backwards;
+ -moz-animation: valo-animate-in-fade 400ms 100ms backwards;
+ animation: valo-animate-in-fade 400ms 100ms backwards;
+}
+
+.v-op12 .org_osbee_vaadin_addons_designer_overlay .v-window-modalitycurtain {
+ -webkit-animation: none;
+ -moz-animation: none;
+ animation: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-draggingCurtain {
+ position: fixed !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-resizingCurtain + .v-window, .org_osbee_vaadin_addons_designer_overlay .v-window-draggingCurtain + .v-window {
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-outerheader {
+ cursor: move;
+ position: absolute;
+ z-index: 2;
+ top: 0;
+ left: 0;
+ right: 0;
+ -webkit-transform: translatez(0);
+ -moz-transform: translatez(0);
+ -ms-transform: translatez(0);
+ -o-transform: translatez(0);
+ transform: translatez(0);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-outerheader:after {
+ content: "";
+ position: absolute;
+ bottom: -1px;
+ right: 0;
+ left: 0;
+ height: 0;
+ border-top: 1px solid #dfdfdf;
+ border-color: rgba(197, 197, 197, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-header {
+ line-height: 36px;
+ padding-left: 12px;
+ margin-right: 74px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ color: #7e7e7e;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-restorebox-disabled ~ .v-window-closebox ~ .v-window-header, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox-disabled ~ .v-window-closebox ~ .v-window-header {
+ margin-right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-restorebox-disabled ~ .v-window-closebox-disabled ~ .v-window-header, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox-disabled ~ .v-window-closebox-disabled ~ .v-window-header {
+ margin-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox {
+ position: absolute;
+ z-index: 3;
+ top: 0;
+ right: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 33px;
+ height: 36px;
+ background-color: white;
+ line-height: 34px;
+ text-align: center;
+ cursor: pointer;
+ font-size: 21px;
+ color: #999999;
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox:focus, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox:focus, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox:hover, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox:hover, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox:hover {
+ opacity: 1;
+ filter: none ;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox:active, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox:active, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox:active {
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox {
+ padding-right: 4px;
+ border-radius: 0 4px 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox:before {
+ content: "\00d7";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox {
+ right: 33px;
+ padding-left: 4px;
+ border-radius: 0 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox + .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox + .v-window-closebox {
+ border-bottom-left-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox-disabled, .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox-disabled, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox-disabled, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox-disabled {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox-disabled + .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox-disabled + .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox-disabled + .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox-disabled + .v-window-closebox {
+ width: 37px;
+ padding-right: 0;
+ border-bottom-left-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox:before {
+ content: "+";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-restorebox:before {
+ content: "\2013";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window > .popupContent, .org_osbee_vaadin_addons_designer_overlay .v-window-wrap, .org_osbee_vaadin_addons_designer_overlay .v-window-contents, .org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable {
+ height: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-radius: 4px;
+ margin-top: 0 !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-margin-top {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-margin-right {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-margin-bottom {
+ padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-margin-left {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-top"] > tbody > [class*="firstrow"] > td {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-bottom"] > tbody > [class*="lastrow"] > td {
+ padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="captioncell"] {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 {
+ left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 {
+ right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable:before {
+ content: "";
+ position: absolute;
+ z-index: 2;
+ top: 0;
+ height: 0;
+ border-top: 1px solid white;
+ left: 0;
+ right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable .v-panel-captionwrap:after {
+ border-color: #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable .v-panel-content:before {
+ border-color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-footer {
+ height: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-resizebox {
+ position: absolute;
+ z-index: 1000;
+ right: 0;
+ bottom: 0;
+ width: 19px;
+ height: 19px;
+ cursor: nwse-resize;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox {
+ background: #000;
+ filter: alpha(opacity=0.1);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox {
+ cursor: se-resize;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-modalitycurtain:active ~ .v-window {
+ -webkit-animation: none;
+ -moz-animation: none;
+ animation: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar > .v-widget, .org_osbee_vaadin_addons_designer_overlay .v-window-bottom-toolbar > .v-widget {
+ vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar .v-label, .org_osbee_vaadin_addons_designer_overlay .v-window-bottom-toolbar .v-label {
+ line-height: 36px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar .v-spacing, .org_osbee_vaadin_addons_designer_overlay .v-window-bottom-toolbar .v-spacing {
+ width: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar.v-layout {
+ padding: 7px 12px;
+ position: relative;
+ z-index: 2;
+ border-top: 1px solid #dfdfdf;
+ border-bottom: 1px solid #dfdfdf;
+ background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar.v-menubar {
+ margin: 12px 12px 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar.v-menubar-borderless {
+ padding-left: 6px;
+ padding-right: 6px;
+ margin: 5px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-bottom-toolbar.v-layout {
+ padding: 7px 12px;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #f0f0f0 0, #fafafa 4px);
+ background-image: linear-gradient(to bottom,#f0f0f0 0, #fafafa 4px);
+ border-top: 1px solid #dfdfdf;
+ border-radius: 0 0 4px 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left.v-margin-right.v-margin-top .v-window-top-toolbar.v-layout {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ margin: -12px -12px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left.v-margin-right.v-margin-top .v-window-top-toolbar.v-menubar {
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left.v-margin-right.v-margin-top .v-window-top-toolbar.v-menubar-borderless {
+ margin: -6px -6px 0;
+ padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left.v-margin-right.v-margin-bottom .v-window-bottom-toolbar.v-layout {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ margin: 0 -12px -12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree {
+ position: relative;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node:before {
+ content: "";
+ position: absolute;
+ display: inline-block;
+ z-index: 3;
+ width: 1.9em;
+ height: 28px;
+ cursor: pointer;
+ background: red;
+ opacity: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node:before {
+ position: static;
+ margin-left: -1.9em;
+ vertical-align: top;
+ content: "\f0da";
+ font-family: ThemeIcons;
+ text-align: center;
+ background: transparent;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node {
+ padding-left: 1.9em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption {
+ height: 28px;
+ line-height: 27px;
+ overflow: hidden;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption > div {
+ display: inline-block;
+ width: 100%;
+ position: relative;
+ z-index: 2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption > div:before {
+ content: "\f0da";
+ font-family: ThemeIcons;
+ display: inline-block;
+ width: 0.5em;
+ text-align: center;
+ margin: 0 0.6em 0 0.8em;
+ -webkit-transition: all 100ms;
+ -moz-transition: all 100ms;
+ transition: all 100ms;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption > div:before {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption span {
+ padding-right: 28px;
+ cursor: pointer;
+ display: inline-block;
+ width: 100%;
+}
+
+.v-ie .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption span {
+ width: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption .v-icon {
+ padding-right: 0;
+ width: auto;
+ min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption:after {
+ content: "";
+ display: block;
+ vertical-align: top;
+ position: absolute;
+ z-index: 1;
+ left: 0;
+ margin-top: -28px;
+ width: 100%;
+ height: 28px;
+ border-radius: 4px;
+ opacity: 0;
+ -webkit-transition: opacity 120ms;
+ -moz-transition: opacity 120ms;
+ transition: opacity 120ms;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption:after {
+ content: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption {
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-expanded > .v-tree-node-caption > div:before {
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ -o-transform: rotate(90deg);
+ transform: rotate(90deg);
+ content: "\f0da";
+ font-family: ThemeIcons;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-expanded:before {
+ content: "\f0d7";
+ font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-leaf:before, .org_osbee_vaadin_addons_designer_overlay .v-tree-node-leaf > .v-tree-node-caption > div:before {
+ visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-focused:after {
+ opacity: 1;
+ border: 1px solid #197de1;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-focused {
+ outline: 1px dotted #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-selected {
+ color: #ecf2f8;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-selected:after {
+ opacity: 1;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ border: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-selected {
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-children {
+ padding-left: 19px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-children {
+ padding-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-top:before, .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom:after, .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom.v-tree-node-dragfolder.v-tree-node-expanded > .v-tree-node-children:before {
+ content: "\2022";
+ display: block;
+ position: absolute;
+ height: 2px;
+ width: 100%;
+ background: #197de1;
+ font-size: 32px;
+ line-height: 2px;
+ color: #197de1;
+ text-indent: -4px;
+ text-shadow: 0 0 1px #fafafa, 0 0 1px #fafafa;
+ opacity: 1;
+ visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom.v-tree-node-dragfolder.v-tree-node-expanded:after {
+ content: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption-drag-center {
+ -webkit-box-shadow: 0 0 0 2px #197de1;
+ box-shadow: 0 0 0 2px #197de1;
+ position: relative;
+ border-radius: 4px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption-drag-center {
+ outline: 2px solid #197de1;
+}
+
+.v-ff .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-top:before, .v-ff .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom:after {
+ line-height: 1px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-top:before, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom:after {
+ line-height: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table {
+ position: relative;
+ background: #fafafa;
+ color: #464646;
+ overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header table, .org_osbee_vaadin_addons_designer_overlay .v-table-footer table, .org_osbee_vaadin_addons_designer_overlay .v-table-table {
+ -webkit-box-shadow: 0 0 0 1px #d4d4d4;
+ box-shadow: 0 0 0 1px #d4d4d4;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-header table, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-footer table, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-table {
+ outline: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-footer-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-header-drag {
+ border: 1px solid #d4d4d4;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ white-space: nowrap;
+ font-size: 14px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-wrap {
+ position: relative;
+ border-bottom: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-footer-wrap {
+ border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-footer td {
+ border-left: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-footer-container, .org_osbee_vaadin_addons_designer_overlay .v-table-caption-container {
+ overflow: hidden;
+ line-height: 1;
+ min-height: 37px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-footer-container, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-caption-container {
+ min-height: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-footer-container {
+ padding: 11px 12px 12px;
+ float: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class^="v-table-header-cell"] {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-caption-container, .org_osbee_vaadin_addons_designer_overlay .v-table-header-drag {
+ padding: 12px 12px 11px;
+ border-left: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-caption-container-align-right {
+ padding-right: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-resizer {
+ height: 37px;
+ width: 8px;
+ cursor: e-resize;
+ cursor: col-resize;
+ position: relative;
+ right: -4px;
+ z-index: 1;
+ margin-left: -8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-content {
+ border-left: 1px solid #d4d4d4;
+ overflow: hidden;
+ height: 37px;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-content:first-child {
+ border-left: none;
+ padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header td:first-child .v-table-caption-container, .org_osbee_vaadin_addons_designer_overlay .v-table-footer td:first-child {
+ border-left-color: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper {
+ line-height: 1;
+ padding: 0 12px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin-right: 0 !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper > .v-widget {
+ margin: 3px -6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper > .v-widget.v-label, .org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper > .v-widget.v-checkbox, .org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper > .v-widget.v-select-optiongroup {
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper > .v-widget.v-progressbar {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-body {
+ border: 1px solid #d4d4d4;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-table {
+ background-color: white;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-table td {
+ border-top: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-table tr:first-child > td {
+ border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row {
+ background-color: white;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-odd {
+ background-color: #f5f5f5;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-body-noselection .v-table-row, .org_osbee_vaadin_addons_designer_overlay .v-table-body-noselection .v-table-row-odd {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected {
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ background-origin: border-box;
+ color: #ecf2f8;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected + .v-selected {
+ background: #166ed5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected + .v-selected td {
+ border-top-color: #166ed5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected .v-table-cell-content {
+ border-color: transparent;
+ border-left-color: #1d69b4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected .v-table-cell-content:first-child {
+ border-left-color: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-asc .v-table-sort-indicator, .org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-desc .v-table-sort-indicator {
+ background: transparent;
+ width: 19px;
+ height: 37px;
+ line-height: 37px;
+ margin-left: -19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-asc .v-table-sort-indicator:before, .org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-desc .v-table-sort-indicator:before {
+ font-style: normal;
+ font-weight: normal;
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-asc .v-table-sort-indicator:before {
+ content: "\f0de";
+ font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-desc .v-table-sort-indicator:before {
+ content: "\f0dd";
+ font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="rowheader"] span.v-icon {
+ min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-focus {
+ outline: 1px solid #197de1;
+ outline-offset: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-drag-element.v-table-focus, .org_osbee_vaadin_addons_designer_overlay .v-drag-element .v-table-focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-drag {
+ position: absolute;
+ opacity: 0.9;
+ filter: alpha(opacity=90) ;
+ margin-top: -19px;
+ z-index: 30000;
+ line-height: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-focus-slot-right {
+ border-right: 3px solid #197de1;
+ right: -2px;
+ margin-left: -11px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-focus-slot-left {
+ float: left;
+ border-left: 3px solid #197de1;
+ left: -1px;
+ right: auto;
+ margin-left: 0 !important;
+ margin-right: -11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector {
+ height: 37px;
+ padding: 0 16px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ position: absolute;
+ z-index: 2;
+ top: 0;
+ right: 0;
+ width: 19px;
+ height: 19px;
+ line-height: 19px;
+ padding: 0;
+ border-top-width: 0;
+ border-right-width: 0;
+ border-radius: 0 0 0 4px;
+ cursor: pointer;
+ text-align: center;
+ opacity: 0;
+ filter: alpha(opacity=0) ;
+ -webkit-transition: opacity 200ms 2s;
+ -moz-transition: opacity 200ms 2s;
+ transition: opacity 200ms 2s;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:hover:after {
+ background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:focus:after {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:active:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:after {
+ content: "";
+ position: absolute;
+ border: none;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:active:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:before {
+ font-family: ThemeIcons;
+ content: "\f013";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-wrap:hover .v-table-column-selector {
+ opacity: 1;
+ filter: none ;
+ -webkit-transition-delay: 200ms;
+ -moz-transition-delay: 200ms;
+ transition-delay: 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-on:before, .org_osbee_vaadin_addons_designer_overlay .v-off:before {
+ content: "\f00c";
+ font-family: ThemeIcons;
+ font-size: 0.9em;
+ margin-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-on div, .org_osbee_vaadin_addons_designer_overlay .v-off div {
+ display: inline;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-off:before {
+ visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay tbody.v-drag-element {
+ display: block;
+ overflow: visible;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background: transparent;
+ opacity: 1;
+ filter: none ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay tbody.v-drag-element tr {
+ display: block;
+
+
+ -webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+ border-radius: 4px;
+ overflow: hidden;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+ background: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-body {
+ position: relative;
+ z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-scrollposition {
+ position: absolute;
+ top: 50%;
+ width: 100%;
+ height: 37px;
+ line-height: 37px;
+ margin: -19px 0 0 !important;
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-drag {
+ overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-drag .v-table-body {
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ border-color: #197de1;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-drag .v-table-body {
+ border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-drag .v-table-body .v-table-focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-middle .v-table-cell-content {
+ background-color: #d1e5f9;
+ color: #214060;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-bottom td.v-table-cell-content {
+ border-bottom: 2px solid #197de1;
+ height: 35px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-bottom .v-table-cell-wrapper {
+ margin-bottom: -2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-top td.v-table-cell-content {
+ border-top: 2px solid #197de1;
+ height: 36px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-top .v-table-cell-wrapper {
+ margin-top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-stripes .v-table-row, .org_osbee_vaadin_addons_designer_overlay .v-table-no-stripes .v-table-row-odd {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-vertical-lines .v-table-cell-content {
+ border-left: none;
+ padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-vertical-lines.v-treetable .v-table-cell-content {
+ padding-left: 13px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-horizontal-lines .v-table-cell-content {
+ border-top: none;
+ border-bottom: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-horizontal-lines .v-table-row-drag-top .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-no-horizontal-lines .v-table-row-drag-bottom .v-table-cell-content {
+ height: 36px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-header .v-table-header-wrap {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-header-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-footer-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-header-drag, .org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-body {
+ border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-header-wrap {
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-footer-wrap {
+ border-top: 1px solid #d9d9d9;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-footer-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-drag, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-footer-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-drag {
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-footer-container, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-footer-container {
+ padding: 8px 7px 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-caption-container, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-drag, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-caption-container, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-drag {
+ padding-top: 9px;
+ padding-bottom: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-caption-container-align-right, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-caption-container-align-right {
+ padding-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-resizer, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-resizer {
+ height: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-content {
+ height: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper {
+ padding-left: 6px;
+ padding-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper > .v-widget, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper > .v-widget {
+ margin: 2px -3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper > .v-widget.v-label, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper > .v-widget.v-checkbox, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper > .v-widget.v-select-optiongroup, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper > .v-widget.v-label, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper > .v-widget.v-checkbox, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper > .v-widget.v-select-optiongroup {
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper > .v-widget.v-progressbar, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper > .v-widget.v-progressbar {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-cell-asc .v-table-sort-indicator, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-cell-desc .v-table-sort-indicator, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-cell-asc .v-table-sort-indicator, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-cell-desc .v-table-sort-indicator {
+ height: 31px;
+ line-height: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-drag, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-drag {
+ margin-top: -16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact.v-treetable .v-table-cell-wrapper, .org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-cell-wrapper {
+ padding-left: 0;
+ padding-right: 0;
+ min-height: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact.v-treetable .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-cell-content {
+ padding-left: 6px;
+ padding-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact.v-treetable .v-table-cell-content:first-child, .org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-cell-content:first-child {
+ padding-left: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact.v-treetable .v-table-footer-container, .org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-footer-container {
+ padding-left: 6px;
+ padding-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-row-drag-top .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-row-drag-bottom .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-row-drag-top .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-row-drag-bottom .v-table-cell-content {
+ height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-small {
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-cell-wrapper {
+ min-height: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="caption-container"], .org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="footer-container"], .org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="cell-wrapper"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="caption-container"], .org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="footer-container"] {
+ min-height: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="cell-wrapper"] {
+ min-height: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="caption-container"] {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="caption-container-align-right"] {
+ padding-left: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="footer-container"] {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="cell-content"] {
+ padding-left: 12px;
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="cell-content"]:first-child {
+ padding-left: 13px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable-treespacer {
+ display: inline-block;
+ position: absolute;
+ width: 19px !important;
+ margin-left: -25px;
+ text-align: center;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable-node-closed:before {
+ content: "\f0da";
+ font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable-node-open:before {
+ content: "\f0d7";
+ font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter {
+ width: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter:after {
+ left: -6px;
+ right: -6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before {
+ height: 37px;
+ padding: 0 16px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ height: auto;
+ padding: 0;
+ border-radius: 0;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(left, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to right,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before:hover:after {
+ background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before:focus:after {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before:active:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal > div > .v-splitpanel-second-container {
+ margin-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical > div > .v-splitpanel-vsplitter {
+ height: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical > div > .v-splitpanel-vsplitter:after {
+ top: -6px;
+ bottom: -6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before {
+ height: 37px;
+ padding: 0 16px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ height: auto;
+ padding: 0;
+ border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before:hover:after {
+ background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before:focus:after {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before:active:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter {
+ width: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter:after {
+ left: 0px;
+ right: 0px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before {
+ height: 37px;
+ padding: 0 16px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ height: auto;
+ padding: 0;
+ border-radius: 0;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(left, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to right,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before:hover:after {
+ background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before:focus:after {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before:active:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:after {
+ content: "";
+ border: 1px solid #dadada;
+ border-top-color: #bababa;
+ border-left-color: #bababa;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 0;
+ height: 37px;
+ margin-left: -1px;
+ margin-top: -19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large > div > .v-splitpanel-second-container {
+ margin-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter {
+ height: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter:after {
+ top: 0px;
+ bottom: 0px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before {
+ height: 37px;
+ padding: 0 16px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ height: auto;
+ padding: 0;
+ border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before:hover:after {
+ background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before:focus:after {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before:active:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:after {
+ content: "";
+ border: 1px solid #dadada;
+ border-top-color: #bababa;
+ border-left-color: #bababa;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 37px;
+ height: 0;
+ margin-left: -19px;
+ margin-top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-wrapper {
+ border-radius: 4px;
+ height: 9px;
+ background-color: #d4d4d4;
+ background-image: -webkit-linear-gradient(bottom, #d7d7d7 2%, #c7c7c7 98%);
+ background-image: linear-gradient(to top,#d7d7d7 2%, #c7c7c7 98%);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ min-width: 74px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-indicator {
+ border-radius: 4px;
+ height: inherit;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+
+
+ border: 1px solid #1362b1;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ max-width: 100%;
+ min-width: 8px;
+ -webkit-transition: width 160ms;
+ -moz-transition: width 160ms;
+ transition: width 160ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-point .v-progressbar-indicator {
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border: none;
+ text-align: right;
+ overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-point .v-progressbar-indicator:before {
+ content: "";
+ display: inline-block;
+ border-radius: 4px;
+ height: inherit;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+
+
+ border: 1px solid #1362b1;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ max-width: 100%;
+ width: 9px;
+ vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate {
+ height: 24px !important;
+ width: 24px !important;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 2px solid rgba(25, 125, 225, 0.2);
+ border-top-color: #197de1;
+ border-right-color: #197de1;
+ border-radius: 100%;
+ -webkit-animation: v-rotate-360 500ms infinite linear;
+ -moz-animation: v-rotate-360 500ms infinite linear;
+ animation: v-rotate-360 500ms infinite linear;
+ pointer-events: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate {
+ border: none;
+ border-radius: 4px;
+ background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+ background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate {
+ min-width: 30px;
+ min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate .v-progressbar-wrapper {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider:focus .v-slider-handle:after {
+ opacity: 1;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-slider:focus .v-slider-handle:after {
+ visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-base {
+ border-radius: 4px;
+ height: 9px;
+ background-color: #d4d4d4;
+ background-image: -webkit-linear-gradient(bottom, #d7d7d7 2%, #c7c7c7 98%);
+ background-image: linear-gradient(to top,#d7d7d7 2%, #c7c7c7 98%);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ min-width: 74px;
+ height: 6px;
+ margin: 16px 11px;
+ white-space: nowrap;
+ overflow: hidden;
+
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-base:before {
+ content: "";
+ position: absolute;
+ top: 16px;
+ bottom: 16px;
+ left: 11px;
+ width: 8px;
+ border-radius: 4px;
+ border-left: 1px solid #1362b1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-base:after {
+ border-radius: 4px;
+ height: inherit;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+
+
+ border: 1px solid #1362b1;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ max-width: 100%;
+ content: "";
+ display: inline-block;
+ margin-left: -100%;
+ width: 100%;
+ vertical-align: top;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-slider-base:after {
+ position: relative;
+ left: -11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-has-width > .v-slider-base {
+ min-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle {
+ margin-top: -16px;
+ width: 0.1px;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before {
+ height: 37px;
+ padding: 0 16px;
+ color: #191919;
+ font-weight: 400;
+
+
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+ border-top-color: #c5c5c5;
+ border-bottom-color: #bcbcbc;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before:after {
+ border: inherit;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before:hover:after {
+ background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before:focus:after {
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before:active:after {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:after {
+ border: 1px solid #c5c5c5;
+ border-color: #197de1;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ opacity: 0;
+ -webkit-transition: opacity 200ms;
+ -moz-transition: opacity 200ms;
+ transition: opacity 200ms;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-slider-handle:after {
+ visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before, .org_osbee_vaadin_addons_designer_overlay .v-slider-handle:after {
+ content: "";
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+ width: 22px;
+ height: 22px;
+ border-radius: 11px;
+ position: absolute;
+ z-index: 1;
+ margin-top: 8px;
+ margin-left: -11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-feedback {
+ background-color: #323232;
+ background-color: rgba(50, 50, 50, 0.9);
+ -webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
+ color: white;
+ padding: 5px 9px;
+ border-radius: 3px;
+ max-width: 35em;
+ overflow: hidden !important;
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical {
+ padding: 11px 0;
+ height: 96px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-base {
+ background-color: #d4d4d4;
+ background-image: -webkit-linear-gradient(right, #d7d7d7 2%, #c7c7c7 98%);
+ background-image: linear-gradient(to left,#d7d7d7 2%, #c7c7c7 98%);
+ width: 6px;
+ height: 100% !important;
+ min-width: 0;
+ margin: 0 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-base:before {
+ top: auto;
+ bottom: 11px;
+ left: 16px;
+ right: 16px;
+ width: auto;
+ height: 8px;
+ border-left: none;
+ border-bottom: 1px solid #1362b1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-base:after {
+ height: 101%;
+ margin-left: 0;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(left, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to right,#1b87e3 2%, #166ed5 98%);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-base:after {
+ top: 11px;
+ left: 0;
+ height: 130%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-handle {
+ width: 0;
+ height: 0.1px;
+ width: 37px;
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-handle:before, .org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-handle:after {
+ width: 22px;
+ height: 22px;
+ margin-top: -11px;
+ margin-left: -8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-no-indicator .v-slider-base:before, .org_osbee_vaadin_addons_designer_overlay .v-slider-no-indicator .v-slider-base:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet:not(.v-has-width) {
+ width: auto !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-spacertd {
+ display: none !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabcontainer {
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabcontainer:before {
+ content: "";
+ position: absolute;
+ height: 0;
+ border-top: 1px solid #dfdfdf;
+ bottom: 0;
+ left: 0;
+ right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabcontainer .v-tabsheet-tabs {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell {
+ vertical-align: bottom;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-tabitem {
+ line-height: 0;
+ overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption {
+ margin-left: 19px;
+ padding: 0 4px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ cursor: pointer;
+ text-align: center;
+ line-height: 37px;
+ font-size: 15px;
+ font-weight: 300;
+ color: #696969;
+ width: auto !important;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ border-bottom: 2px solid transparent;
+ position: relative;
+ -webkit-transition: border-bottom 200ms, color 200ms;
+ -moz-transition: border-bottom 200ms, color 200ms;
+ transition: border-bottom 200ms, color 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption .v-captiontext {
+ display: inline;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption .v-icon + .v-captiontext {
+ margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption:hover {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+ cursor: default;
+ color: inherit !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell:first-child .v-caption, .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell[aria-hidden="true"] + td .v-caption {
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell:focus .v-caption {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-tabitem-selected .v-caption.v-caption {
+ border-bottom-color: #197de1;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption-closable {
+ padding-right: 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell.icons-on-top .v-caption-closable {
+ padding-right: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-caption-close {
+ position: absolute;
+ right: 0;
+ top: 50%;
+ margin: -8px 0 0;
+ font-size: 18px;
+ line-height: 18px;
+ width: 18px;
+ text-align: center;
+ border-radius: 2px;
+ color: #969696;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-caption-close:hover {
+ background: rgba(0, 0, 0, 0.03);
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-caption-close:active {
+ background: #197de1;
+ color: #c8dbed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ padding-left: 19px;
+ background-color: transparent;
+ background-image: -webkit-linear-gradient(right, #fafafa 70%, rgba(250, 250, 250, 0) 100%);
+ background-image: linear-gradient(to left,#fafafa 70%, rgba(250, 250, 250, 0) 100%);
+ pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller:after {
+ content: "";
+ height: 1px;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ display: block;
+ background-color: transparent;
+ background-image: -webkit-linear-gradient(right, #dfdfdf 70%, rgba(223, 223, 223, 0) 100%);
+ background-image: linear-gradient(to left,#dfdfdf 70%, rgba(223, 223, 223, 0) 100%);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller {
+ background-color: #fafafa;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller:after, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller:after {
+ background-color: #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller button {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ border: none;
+ background: transparent;
+ font: inherit;
+ color: inherit;
+ height: 100%;
+ margin: 0;
+ padding: 0 9px;
+ outline: none;
+ cursor: pointer;
+ pointer-events: auto;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller button:hover {
+ opacity: 1;
+ filter: none ;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller button:active {
+ opacity: 0.7;
+ filter: alpha(opacity=70) ;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller button::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="Next"] {
+ padding-left: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="Next"]:before {
+ font-family: ThemeIcons;
+ content: "\f054";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="Prev"] {
+ padding-right: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="Prev"]:before {
+ font-family: ThemeIcons;
+ content: "\f053";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="disabled"] {
+ cursor: default;
+ color: inherit !important;
+ opacity: 0.1 !important;
+ filter: alpha(opacity=10) !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabsheetpanel > .v-scrollable > .v-widget {
+ -webkit-animation: valo-animate-in-fade 300ms backwards;
+ -moz-animation: valo-animate-in-fade 300ms backwards;
+ animation: valo-animate-in-fade 300ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-deco {
+ height: 20px !important;
+ width: 20px !important;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 2px solid rgba(25, 125, 225, 0.2);
+ border-top-color: #197de1;
+ border-right-color: #197de1;
+ border-radius: 100%;
+ -webkit-animation: v-rotate-360 500ms infinite linear;
+ -moz-animation: v-rotate-360 500ms infinite linear;
+ animation: v-rotate-360 500ms infinite linear;
+ pointer-events: none;
+ display: none;
+ position: absolute;
+ z-index: 1;
+ bottom: 50%;
+ margin-bottom: -29px;
+ left: 50%;
+ margin-left: -10px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-deco, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-deco {
+ border: none;
+ border-radius: 4px;
+ background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+ background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-deco {
+ min-width: 30px;
+ min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-loading .v-tabsheet-deco {
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer table, .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer tbody, .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer tr {
+ width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer tr {
+ display: table;
+ table-layout: fixed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer td {
+ display: table-cell;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer .v-caption {
+ margin: 0;
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-caption {
+ margin-left: 4px;
+ padding: 0 12px;
+ background-color: #fafafa;
+ border: 1px solid transparent;
+ line-height: 36px;
+ border-radius: 4px 4px 0 0;
+ font-weight: 400;
+ -webkit-transition: background-color 160ms;
+ -moz-transition: background-color 160ms;
+ transition: background-color 160ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-caption:hover {
+ background-color: #f2f2f2;
+ border-bottom-color: #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-caption.v-disabled:hover {
+ background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-caption-closable {
+ padding-right: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-tabsheet-caption-close {
+ top: 4px;
+ right: 4px;
+ margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-tabcontainer td:first-child .v-caption, .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-tabcontainer [aria-hidden="true"] + td .v-caption {
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-tabsheet-tabitem .v-caption {
+ border-color: #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-tabsheet-tabitem-selected .v-caption {
+ background: white;
+ border-color: #dfdfdf;
+ border-bottom: none;
+ padding-bottom: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-content {
+ border: 1px solid #dfdfdf;
+ border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed > .v-tabsheet-content > div {
+ background: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed.padded-tabbar > .v-tabsheet-tabcontainer {
+ border: 1px solid #dfdfdf;
+ border-bottom: none;
+ background: #fafafa;
+ padding-top: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed.icons-on-top > .v-tabsheet-tabcontainer .v-tabsheet-tabitem-selected .v-caption {
+ padding-bottom: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-centered-tabs > .v-tabsheet-tabcontainer {
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-right-aligned-tabs > .v-tabsheet-tabcontainer {
+ text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-padded-tabbar > .v-tabsheet-tabcontainer .v-tabsheet-tabs {
+ padding: 0 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-caption {
+ padding-top: 6px;
+ padding-bottom: 6px;
+ line-height: 1.2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-icon {
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-icon + .v-captiontext.v-captiontext {
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-caption-closable {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-tabsheet-caption-close {
+ top: 4px;
+ margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-compact-tabbar > .v-tabsheet-tabcontainer-compact-tabbar .v-caption {
+ line-height: 1.8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-only-selected-closable > .v-tabsheet-tabcontainer .v-tabsheet-caption-close {
+ visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-only-selected-closable > .v-tabsheet-tabcontainer .v-tabsheet-tabitem-selected .v-tabsheet-caption-close {
+ visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup.v-window {
+ min-width: 220px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-tabsheet-tabs {
+ padding: 0 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] {
+ padding: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-widget {
+ width: 100% !important;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-has-caption {
+ white-space: nowrap;
+ padding-left: 48px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-caption {
+ display: inline-block;
+ margin-left: -48px;
+ width: 48px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-slot-hue-slider + .v-slot .v-has-caption {
+ padding-left: 80px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-slot-hue-slider + .v-slot .v-caption {
+ margin-left: -80px;
+ width: 80px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-slider-red .v-slider-base:after {
+ background: red;
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-slider-green .v-slider-base:after {
+ background: green;
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-slider-blue .v-slider-base:after {
+ background: blue;
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-margin-bottom {
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .resize-button {
+ width: 100% !important;
+ height: auto !important;
+ text-align: center;
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .resize-button:before {
+ font-family: ThemeIcons;
+ content: "\f141";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .resize-button-caption {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-horizontallayout {
+ height: auto !important;
+ padding: 9px 0;
+ background-color: #fafafa;
+ border-top: 1px solid #ededed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-horizontallayout .v-expand {
+ overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-horizontallayout .v-button {
+ width: 80% !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-preview {
+ width: 100% !important;
+ height: auto !important;
+ padding: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-preview-textfield {
+ height: auto !important;
+ text-align: center;
+ border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker {
+ width: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-button-color {
+ position: absolute;
+ top: 6px;
+ right: 6px;
+ bottom: 6px;
+ left: 6px;
+ border-radius: 3px;
+ border: 1px solid rgba(0, 0, 0, 0.5);
+ max-width: 23px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-button-color + .v-button-caption:not(:empty) {
+ margin-left: 19px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-colorpicker-button-color {
+ position: relative;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto;
+ width: 16px;
+ height: 16px;
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0 -8px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-colorpicker-button-color + .v-button-caption {
+ margin-left: 19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel {
+ background: white;
+ color: #474747;
+ border-radius: 4px;
+ border: 1px solid #d5d5d5;
+ -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ overflow: visible !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-caption {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 12px;
+ line-height: 36px;
+ border-bottom: 1px solid #d5d5d5;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #f6f6f6 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #f6f6f6 98%);
+ color: #464646;
+ font-weight: 400;
+ font-size: 14px;
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee;
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ border-radius: 3px 3px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content > .v-margin-top {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content > .v-margin-right {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content > .v-margin-bottom {
+ padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content > .v-margin-left {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-borderless {
+ background: transparent;
+ color: inherit;
+ border: none;
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-borderless > div > [class*="-caption"] {
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: inherit;
+ padding: 0;
+ margin: 0 12px;
+ border-bottom: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-well {
+ background: #f5f5f5;
+ color: #454545;
+ -webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+ border-radius: 4px;
+ border: 1px solid #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-well > div > [class*="-caption"] {
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-scroll-divider > [class*="-captionwrap"] {
+ position: relative;
+ z-index: 2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-scroll-divider > [class*="-captionwrap"]:after {
+ content: "";
+ position: absolute;
+ bottom: -1px;
+ right: 0;
+ left: 0;
+ height: 0;
+ border-top: 1px solid #dfdfdf;
+ border-color: rgba(197, 197, 197, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-scroll-divider > [class*="-content"]:before {
+ content: "";
+ position: absolute;
+ z-index: 2;
+ top: 0;
+ height: 0;
+ border-top: 1px solid #fafafa;
+ left: 0;
+ right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-caption.v-horizontallayout {
+ height: auto !important;
+ line-height: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-caption.v-horizontallayout .v-slot {
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-caption.v-horizontallayout .v-label {
+ line-height: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion {
+ background: white;
+ color: #474747;
+ border-radius: 4px;
+ border: 1px solid #d5d5d5;
+ -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #f4f4f4 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #f4f4f4 98%);
+ overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item:last-child {
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item:last-child [class*="item-content"] {
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item[class*="item-open"]:last-child > div > .v-caption {
+ border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item:not([class*="item-open"]):last-child > div > .v-caption {
+ border-bottom: none;
+ margin-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item[class*="item-open"] + [class*="item"] {
+ border-top: 1px solid #d9d9d9;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption {
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption > .v-caption {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 12px;
+ line-height: 36px;
+ border-bottom: 1px solid #d5d5d5;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #f6f6f6 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #f6f6f6 98%);
+ color: #464646;
+ font-weight: 400;
+ font-size: 14px;
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee;
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+ display: block;
+ background: transparent;
+ border-bottom-color: #c9c9c9;
+ border-radius: inherit;
+ cursor: pointer;
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption > .v-caption:hover:before, .org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption > .v-caption:active:before {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption > .v-caption:hover:before {
+ background-color: rgba(186, 186, 186, 0.1);
+ border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption > .v-caption:active:before {
+ background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content {
+ -webkit-box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.05);
+ background-color: white;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content > .v-margin-top {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content > .v-margin-right {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content > .v-margin-bottom {
+ padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content > .v-margin-left {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-borderless {
+ border: none;
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-borderless > .v-accordion-item, .org_osbee_vaadin_addons_designer_overlay .v-accordion-borderless > .v-accordion-item > div > .v-caption, .org_osbee_vaadin_addons_designer_overlay .v-accordion-borderless > .v-accordion-item > .v-accordion-item-content {
+ border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol {
+ white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol select {
+ border: 1px solid #c5c5c5;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol select:focus {
+ outline: none;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-select-twincol .v-nativebutton {
+ width: auto !important;
+ margin-top: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol .v-nativebutton {
+ margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-caption-left, .org_osbee_vaadin_addons_designer_overlay .v-select-twincol-caption-right {
+ font-size: 14px;
+ font-weight: 400;
+ padding-bottom: 0.3em;
+ padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons {
+ white-space: nowrap;
+ display: inline-block;
+ vertical-align: top;
+ position: relative;
+ min-width: 3.5em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: inline-block;
+ vertical-align: top;
+ text-align: left;
+ white-space: normal;
+ position: absolute;
+ left: 9px;
+ right: 9px;
+ top: 36px;
+ padding: 0;
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:first-child {
+ top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button-caption {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:focus {
+ z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:first-child {
+ border-radius: 4px 4px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:last-child {
+ border-radius: 0 0 4px 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button-wrap:before {
+ font-family: ThemeIcons;
+ content: "\f053";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:first-child .v-button-wrap:before {
+ font-family: ThemeIcons;
+ content: "\f054";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select select {
+ border: 1px solid #c5c5c5;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select select:focus {
+ outline: none;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select {
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select + .v-textfield {
+ width: auto !important;
+ margin-top: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select + .v-textfield + .v-nativebutton {
+ margin-top: 9px;
+ margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-day {
+ font-weight: 400;
+ text-align: center;
+ padding: 7px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back, .org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ background: transparent;
+ border: none;
+ padding: 0;
+ margin: 0;
+ cursor: pointer;
+ outline: none;
+ color: inherit;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back:focus, .org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back:hover, .org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next:hover {
+ opacity: 1;
+ filter: none ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back:active, .org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next:active {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back:before {
+ font-family: ThemeIcons;
+ content: "\f053";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next:before {
+ font-family: ThemeIcons;
+ content: "\f054";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month {
+ outline: none;
+ overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month td {
+ vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-number {
+ cursor: pointer;
+ width: 20px;
+ text-align: center;
+ font-size: 0.8em;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-number:hover {
+ opacity: 1;
+ filter: none ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day {
+ outline: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ line-height: 1.2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-bottom-spacer, .org_osbee_vaadin_addons_designer_overlay .v-calendar-spacer, .org_osbee_vaadin_addons_designer_overlay .v-calendar-bottom-spacer-empty {
+ height: 19px;
+ margin-bottom: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-bottom-spacer {
+ font-size: 0.8em;
+ padding: 0 5px;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-bottom-spacer:hover {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-day-number {
+ line-height: 25px;
+ font-size: 16px;
+ text-align: right;
+ margin: 0 5px;
+ white-space: nowrap;
+ border-top: 1px solid #f2f2f2;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-day-number:hover {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-today {
+ background: #eef3f8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-today .v-calendar-day-number {
+ font-weight: 400;
+ color: #197de1;
+ border-top: 2px solid #197de1;
+ line-height: 24px;
+ margin: 0;
+ padding: 0 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-selected {
+ background-color: #e3edf7;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-dragemphasis {
+ background-color: #a8a8a8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-scrollable {
+ overflow-y: scroll;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-weekly-longevents {
+ margin-left: 50px;
+ border-bottom: 3px solid #e0e0e0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-weekly-longevents .v-calendar-event-all-day {
+ height: 22px;
+ line-height: 1.6;
+ margin-bottom: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week td {
+ vertical-align: middle !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-header-day {
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-times {
+ width: 50px;
+ font-size: 0.77em;
+ line-height: 1;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-time {
+ text-align: right;
+ padding-right: 9px;
+ margin-top: -6px;
+ padding-bottom: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-day-times, .org_osbee_vaadin_addons_designer_overlay .v-calendar-day-times-today {
+ outline: none;
+ border-right: 1px solid transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-day-times:focus, .org_osbee_vaadin_addons_designer_overlay .v-calendar-day-times-today:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot, .org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot-even {
+ border-top: 1px solid #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot:first-child, .org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot-even:first-child {
+ border-top-color: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot {
+ border-top-style: dotted;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot, .org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot-even {
+ margin-right: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-current-time {
+ background: #197de1;
+ line-height: 1px;
+ pointer-events: none;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-current-time:before {
+ content: "\2022";
+ color: #197de1;
+ font-size: 22px;
+ margin-left: -0.07em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-daterange {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-daterange:before {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: -1px;
+ left: 0;
+ background: #197de1;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+ border-radius: 4px 4px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-daterange + .v-daterange {
+ border-color: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-daterange + .v-daterange:before {
+ border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event {
+ font-size: 0.85em;
+ overflow: hidden;
+ cursor: pointer;
+ outline: none;
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month {
+ padding: 0 5px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin-bottom: 3px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ height: 19px;
+ line-height: 19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month .v-calendar-event-time {
+ float: right;
+ font-size: 0.9em;
+ line-height: 19px;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month:before {
+ content: "\25cf";
+ margin-right: 0.2em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day {
+ padding: 0 5px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ height: 19px;
+ line-height: 19px;
+ border-radius: 0;
+ margin-left: -1px;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day:before {
+ content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-start {
+ overflow: visible;
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-start.v-calendar-event-continued-to, .org_osbee_vaadin_addons_designer_overlay .v-calendar-event-start.v-calendar-event-end {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-start {
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ margin-left: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-end {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ margin-right: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-caption {
+ font-weight: 500;
+ line-height: 1.2;
+ padding: 5px 0;
+ position: absolute;
+ overflow: hidden;
+ right: 9px;
+ left: 5px;
+ bottom: 0;
+ top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-caption span {
+ font-weight: 300;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event {
+ overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event-content {
+ margin-top: -1px;
+ border-radius: 5px;
+ border: 1px solid #fafafa;
+ padding-top: 3px;
+ margin-right: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month:before {
+ color: #00ace0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day {
+ background-color: #c8eaf4;
+ background-color: rgba(200, 234, 244, 0.8);
+ color: #00ace0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event {
+ color: #00ace0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event .v-calendar-event-content {
+ background-color: #c8eaf4;
+ background-color: rgba(200, 234, 244, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month[class*="color2"]:before {
+ color: #2d9f19;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day[class*="color2"] {
+ background-color: #d1e7cd;
+ background-color: rgba(209, 231, 205, 0.8);
+ color: #2d9f19;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color2"] {
+ color: #2d9f19;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color2"] .v-calendar-event-content {
+ background-color: #d1e7cd;
+ background-color: rgba(209, 231, 205, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month[class*="color3"]:before {
+ color: #d18100;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day[class*="color3"] {
+ background-color: #f1e1c8;
+ background-color: rgba(241, 225, 200, 0.8);
+ color: #d18100;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color3"] {
+ color: #d18100;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color3"] .v-calendar-event-content {
+ background-color: #f1e1c8;
+ background-color: rgba(241, 225, 200, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month[class*="color4"]:before {
+ color: #ce3812;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day[class*="color4"] {
+ background-color: #f1d3cb;
+ background-color: rgba(241, 211, 203, 0.8);
+ color: #ce3812;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color4"] {
+ color: #ce3812;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color4"] .v-calendar-event-content {
+ background-color: #f1d3cb;
+ background-color: rgba(241, 211, 203, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month[class*="color5"]:before {
+ color: #2d55cd;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day[class*="color5"] {
+ background-color: #d1d9f1;
+ background-color: rgba(209, 217, 241, 0.8);
+ color: #2d55cd;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color5"] {
+ color: #2d55cd;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color5"] .v-calendar-event-content {
+ background-color: #d1d9f1;
+ background-color: rgba(209, 217, 241, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar.v-disabled * {
+ cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label {
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-undef-w {
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h1, .org_osbee_vaadin_addons_designer_overlay .v-label-h1, .org_osbee_vaadin_addons_designer_overlay h2, .org_osbee_vaadin_addons_designer_overlay .v-label-h2, .org_osbee_vaadin_addons_designer_overlay h3, .org_osbee_vaadin_addons_designer_overlay .v-label-h3 {
+ line-height: 1.1;
+ font-weight: 200;
+ color: #141414;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h1, .org_osbee_vaadin_addons_designer_overlay .v-label-h1 {
+ font-size: 2.4em;
+ margin-top: 1.4em;
+ margin-bottom: 1em;
+
+ letter-spacing: -0.03em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h2, .org_osbee_vaadin_addons_designer_overlay .v-label-h2 {
+ font-size: 1.6em;
+
+ margin-top: 1.6em;
+ margin-bottom: 0.77em;
+ letter-spacing: -0.02em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h3, .org_osbee_vaadin_addons_designer_overlay .v-label-h3 {
+ font-size: 1.2em;
+
+ margin-top: 1.8em;
+ margin-bottom: 0.77em;
+ letter-spacing: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h4, .org_osbee_vaadin_addons_designer_overlay .v-label-h4 {
+ line-height: 1.1;
+ font-weight: 500;
+ font-size: 14px;
+ color: #414141;
+ text-transform: uppercase;
+ letter-spacing: 0;
+ margin-top: 2.4em;
+ margin-bottom: 0.8em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout > h1:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout > h2:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout > h3:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout > h4 > .v-label-h1:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout > .v-label-h2:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout > .v-label-h3:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout > .v-label-h4:first-child {
+ margin-top: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-label-h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-label-h4 {
+ margin-top: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h4 {
+ margin-top: -0.5em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h1.no-margin, .org_osbee_vaadin_addons_designer_overlay .v-label-h1.no-margin, .org_osbee_vaadin_addons_designer_overlay h2.no-margin, .org_osbee_vaadin_addons_designer_overlay .v-label-h2.no-margin, .org_osbee_vaadin_addons_designer_overlay h3.no-margin, .org_osbee_vaadin_addons_designer_overlay .v-label-h3.no-margin, .org_osbee_vaadin_addons_designer_overlay h4.no-margin, .org_osbee_vaadin_addons_designer_overlay .v-label-h4.no-margin {
+ margin: 0 !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-colored {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-large {
+ font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-small {
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-tiny {
+ font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-huge {
+ font-size: 26px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-bold {
+ font-weight: 500;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-light {
+ font-weight: 200;
+ color: #7d7d7d;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-align-right {
+ text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-align-center {
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-spinner {
+ height: 24px !important;
+ width: 24px !important;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 2px solid rgba(25, 125, 225, 0.2);
+ border-top-color: #197de1;
+ border-right-color: #197de1;
+ border-radius: 100%;
+ -webkit-animation: v-rotate-360 500ms infinite linear;
+ -moz-animation: v-rotate-360 500ms infinite linear;
+ animation: v-rotate-360 500ms infinite linear;
+ pointer-events: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-label-spinner, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-label-spinner {
+ border: none;
+ border-radius: 4px;
+ background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+ background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-label-spinner {
+ min-width: 30px;
+ min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-success, .org_osbee_vaadin_addons_designer_overlay .v-label-failure {
+ background: white;
+ color: #474747;
+ border: 2px solid #2c9720;
+ border-radius: 4px;
+ padding: 7px 19px 7px 37px;
+ font-weight: 400;
+ font-size: 15px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-success:before, .org_osbee_vaadin_addons_designer_overlay .v-label-failure:before {
+ font-family: ThemeIcons;
+ content: "\f00c";
+ margin-right: 0.5em;
+ margin-left: -19px;
+ color: #2c9720;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-failure {
+ border-color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-failure:before {
+ content: "\f05e";
+ color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [draggable=true] {
+ -khtml-user-drag: element;
+ -webkit-user-drag: element;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper {
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over:before, .org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over:after {
+ content: "";
+ position: absolute;
+ z-index: 10;
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+ border: 0 solid #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-top:before {
+ border-top-width: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-right:before {
+ border-right-width: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-bottom:before {
+ border-bottom-width: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-left:before {
+ border-left-width: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints .v-ddwrapper-over-top:before, .org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints.v-ddwrapper-over-top:before {
+ border-top-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints .v-ddwrapper-over-top:after, .org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints.v-ddwrapper-over-top:after {
+ border-width: 2px;
+ border-radius: 4px;
+ opacity: 0.3;
+ filter: alpha(opacity=30.0) ;
+ background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints .v-ddwrapper-over-bottom:before, .org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints.v-ddwrapper-over-bottom:before {
+ border-bottom-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints .v-ddwrapper-over-bottom:after, .org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints.v-ddwrapper-over-bottom:after {
+ border-width: 2px;
+ border-radius: 4px;
+ opacity: 0.3;
+ filter: alpha(opacity=30.0) ;
+ background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints.v-ddwrapper-over-left:before, .org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints .v-ddwrapper-over-left:before {
+ border-left-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints.v-ddwrapper-over-left:after, .org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints .v-ddwrapper-over-left:after {
+ border-width: 2px;
+ border-radius: 4px;
+ opacity: 0.3;
+ filter: alpha(opacity=30.0) ;
+ background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints.v-ddwrapper-over-right:before, .org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints .v-ddwrapper-over-right:before {
+ border-right-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints.v-ddwrapper-over-right:after, .org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints .v-ddwrapper-over-right:after {
+ border-width: 2px;
+ border-radius: 4px;
+ opacity: 0.3;
+ filter: alpha(opacity=30.0) ;
+ background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-middle:after, .org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-center:after {
+ border-width: 2px;
+ border-radius: 4px;
+ opacity: 0.3;
+ filter: alpha(opacity=30.0) ;
+ background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-box-drag-hints.v-ddwrapper:after, .org_osbee_vaadin_addons_designer_overlay .no-box-drag-hints .v-ddwrapper:after {
+ display: none !important;
+ content: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-nativebutton {
+ -webkit-touch-callout: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select select {
+ border: 1px solid #c5c5c5;
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select select:focus {
+ outline: none;
+ -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+ box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select {
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select + .v-textfield {
+ width: auto !important;
+ margin-top: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select + .v-textfield + .v-nativebutton {
+ margin-top: 9px;
+ margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview {
+ cursor: pointer;
+ color: #197de1;
+ text-decoration: underline;
+ font-weight: inherit;
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview:hover {
+ color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview.v-disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup {
+ padding: 4px 4px;
+ border-radius: 4px;
+ background-color: white;
+ color: #474747;
+ -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+ -webkit-backface-visibility: hidden;
+ -moz-backface-visibility: hidden;
+ -ms-backface-visibility: hidden;
+ backface-visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup[class*="animate-in"] {
+ -webkit-animation: v-popupview-animate-in 120ms;
+ -moz-animation: v-popupview-animate-in 120ms;
+ animation: v-popupview-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup[class*="animate-out"] {
+ -webkit-animation: valo-animate-out-fade 120ms;
+ -moz-animation: valo-animate-out-fade 120ms;
+ animation: valo-animate-out-fade 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup .popupContent > .v-margin-top {
+ padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup .popupContent > .v-margin-right {
+ padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup .popupContent > .v-margin-bottom {
+ padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup .popupContent > .v-margin-left {
+ padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-loading {
+ margin: 12px 12px;
+ height: 24px !important;
+ width: 24px !important;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 2px solid rgba(25, 125, 225, 0.2);
+ border-top-color: #197de1;
+ border-right-color: #197de1;
+ border-radius: 100%;
+ -webkit-animation: v-rotate-360 500ms infinite linear;
+ -moz-animation: v-rotate-360 500ms infinite linear;
+ animation: v-rotate-360 500ms infinite linear;
+ pointer-events: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-popupview-loading, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-popupview-loading {
+ border: none;
+ border-radius: 4px;
+ background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+ background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-popupview-loading {
+ min-width: 30px;
+ min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ margin: 0;
+ font: inherit;
+
+ font-weight: 400;
+ line-height: normal;
+ height: 37px;
+ border-radius: 4px;
+ padding: 0;
+ border: 1px solid #c5c5c5;
+ background: white;
+ color: #474747;
+ -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-transition: box-shadow 180ms, border 180ms;
+ -moz-transition: box-shadow 180ms, border 180ms;
+ transition: box-shadow 180ms, border 180ms;
+ height: auto;
+ overflow: hidden;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-richtextarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-richtextarea {
+ line-height: 37px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea[class*="prompt"] {
+ color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar {
+ background-color: #fafafa;
+ background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+ background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+ -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+ box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+ border-bottom: 1px solid #c5c5c5;
+ color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-ToggleButton, .org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-PushButton {
+ display: inline-block;
+ line-height: 37px;
+ width: 37px;
+ text-align: center;
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-ToggleButton:hover, .org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-PushButton:hover {
+ color: black;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-ToggleButton-down, .org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-ToggleButton-down-hovering {
+ background-color: #e0e0e0;
+ background-image: -webkit-linear-gradient(bottom, #e0e0e0 2%, #dcdcdc 98%);
+ background-image: linear-gradient(to top,#e0e0e0 2%, #dcdcdc 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top img {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div:before {
+ font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Bold"]:before {
+ content: "\f032";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Italic"]:before {
+ content: "\f033";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Underline"]:before {
+ content: "\f0cd";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Subscript"]:before {
+ content: "\f12c";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Superscript"]:before {
+ content: "\f12b";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Left Justify"]:before {
+ content: "\f036";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Center"]:before {
+ content: "\f037";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Right Justify"]:before {
+ content: "\f038";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Strikethrough"]:before {
+ content: "\f0cc";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Indent Right"]:before {
+ content: "\f03c";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Indent Left"]:before {
+ content: "\f03b";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Horizontal Rule"]:before {
+ content: "\2014";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Ordered List"]:before {
+ content: "\f0cb";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Unordered List"]:before {
+ content: "\f0ca";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Image"]:before {
+ content: "\f03e";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Create Link"]:before {
+ content: "\f0c1";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Remove Link"]:before {
+ content: "\f127";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Remove Formatting"]:before {
+ content: "\f12d";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-bottom {
+ font-size: 13px;
+ padding: 0 9px 9px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-bottom select {
+ margin: 9px 0 0 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextArea {
+ background: #fff;
+ border: none;
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea-readonly {
+ padding: 5px 7px;
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-upload .v-button {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: inline-block;
+ vertical-align: top;
+ text-align: left;
+ white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-upload-immediate .v-button {
+ width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-upload-immediate input[type="file"] {
+ opacity: 0;
+ filter: alpha(opacity=0) ;
+ z-index: -1;
+ position: absolute;
+ right: 0;
+ height: 37px;
+ text-align: right;
+ border: none;
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-top {
+ top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-right {
+ right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-bottom {
+ bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-left {
+ left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-assistive {
+ top: -9999px;
+ left: -9999px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-in {
+ -webkit-animation: valo-animate-in-fade 180ms 10ms backwards;
+ -moz-animation: valo-animate-in-fade 180ms 10ms backwards;
+ animation: valo-animate-in-fade 180ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-in.v-position-top {
+ -webkit-animation: valo-animate-in-slide-down 400ms 10ms backwards;
+ -moz-animation: valo-animate-in-slide-down 400ms 10ms backwards;
+ animation: valo-animate-in-slide-down 400ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-in.v-position-bottom {
+ -webkit-animation: valo-animate-in-slide-up 400ms 10ms backwards;
+ -moz-animation: valo-animate-in-slide-up 400ms 10ms backwards;
+ animation: valo-animate-in-slide-up 400ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-out {
+ -webkit-animation: valo-animate-out-fade 150ms;
+ -moz-animation: valo-animate-out-fade 150ms;
+ animation: valo-animate-out-fade 150ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-out.v-position-top, .org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-out.v-position-bottom {
+ -webkit-animation: valo-animate-out-slide-down-fade 200ms;
+ -moz-animation: valo-animate-out-slide-down-fade 200ms;
+ animation: valo-animate-out-slide-down-fade 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification {
+ border-radius: 4px;
+ text-align: center;
+ position: fixed !important;
+ -webkit-backface-visibility: hidden;
+ -moz-backface-visibility: hidden;
+ -ms-backface-visibility: hidden;
+ backface-visibility: hidden;
+ background: white;
+ -webkit-box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.15);
+ box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.15);
+ padding: 19px 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification .v-Notification-caption {
+ color: #197de1;
+ font-size: 19px;
+ line-height: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification .v-Notification-description {
+ line-height: 1.4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-caption {
+ margin: 0;
+ display: inline-block;
+ text-align: left;
+ font-weight: inherit;
+ line-height: inherit;
+ white-space: nowrap;
+ letter-spacing: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification-details {
+ margin: 0;
+ display: inline-block;
+ vertical-align: middle;
+ max-width: 30em;
+ text-align: left;
+ max-height: 20em;
+ overflow: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-caption ~ .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification-caption ~ .v-Notification-details {
+ margin-left: 24px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-icon + .v-Notification-caption {
+ margin-left: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system {
+ left: 0 !important;
+ right: 0;
+ max-width: 100%;
+ margin: 0 !important;
+ border-radius: 0;
+ -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+ box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+ padding: 12px 15px;
+ background-color: #444;
+ background-color: rgba(68, 68, 68, 0.9);
+ font-weight: 400;
+ line-height: 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-details {
+ max-width: 50em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-top {
+ top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-top[class*="animate-in"] {
+ -webkit-animation: valo-animate-in-slide-down 300ms 10ms backwards;
+ -moz-animation: valo-animate-in-slide-down 300ms 10ms backwards;
+ animation: valo-animate-in-slide-down 300ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-top[class*="animate-out"] {
+ -webkit-animation: valo-animate-out-slide-up 200ms;
+ -moz-animation: valo-animate-out-slide-up 200ms;
+ animation: valo-animate-out-slide-up 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-bottom {
+ bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-bottom[class*="animate-in"] {
+ -webkit-animation: valo-animate-in-slide-up 300ms 10ms backwards;
+ -moz-animation: valo-animate-in-slide-up 300ms 10ms backwards;
+ animation: valo-animate-in-slide-up 300ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-bottom[class*="animate-out"] {
+ -webkit-animation: valo-animate-out-slide-down 200ms;
+ -moz-animation: valo-animate-out-slide-down 200ms;
+ animation: valo-animate-out-slide-down 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-caption {
+ color: #fff;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-details {
+ color: #e6e6e6;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system u {
+ text-decoration: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.tray {
+ text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.tray .v-Notification-caption + .v-Notification-description {
+ display: block;
+ margin: 0.5em 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.warning {
+ background: #FFF3D2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.warning .v-Notification-caption {
+ color: #AC7C00;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.warning .v-Notification-description {
+ color: #9D874D;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.error {
+ background: #ed473b;
+ font-weight: 400;
+ -webkit-box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.25);
+ box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.25);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.error .v-Notification-caption {
+ color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.error .v-Notification-description {
+ color: #f4e0df;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.dark {
+ background-color: #444;
+ background-color: rgba(68, 68, 68, 0.9);
+ font-weight: 400;
+ line-height: 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.dark .v-Notification-caption {
+ color: #fff;
+ vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.dark .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification.dark .v-Notification-details {
+ color: #e6e6e6;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar {
+ left: 0 !important;
+ right: 0;
+ max-width: 100%;
+ margin: 0 !important;
+ border-radius: 0;
+ -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+ box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+ padding: 12px 15px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification.bar .v-Notification-details {
+ max-width: 50em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-top {
+ top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-top[class*="animate-in"] {
+ -webkit-animation: valo-animate-in-slide-down 300ms 10ms backwards;
+ -moz-animation: valo-animate-in-slide-down 300ms 10ms backwards;
+ animation: valo-animate-in-slide-down 300ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-top[class*="animate-out"] {
+ -webkit-animation: valo-animate-out-slide-up 200ms;
+ -moz-animation: valo-animate-out-slide-up 200ms;
+ animation: valo-animate-out-slide-up 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-bottom {
+ bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-bottom[class*="animate-in"] {
+ -webkit-animation: valo-animate-in-slide-up 300ms 10ms backwards;
+ -moz-animation: valo-animate-in-slide-up 300ms 10ms backwards;
+ animation: valo-animate-in-slide-up 300ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-bottom[class*="animate-out"] {
+ -webkit-animation: valo-animate-out-slide-down 200ms;
+ -moz-animation: valo-animate-out-slide-down 200ms;
+ animation: valo-animate-out-slide-down 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.small {
+ padding: 11px 13px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.small .v-Notification-caption {
+ font-size: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.small .v-Notification-description {
+ font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable {
+ padding-right: 59px;
+ overflow: hidden !important;
+ cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable:after {
+ content: "\00d7";
+ font-size: 1.5em;
+ position: absolute;
+ top: 50%;
+ margin-top: -12px;
+ right: 12px;
+ width: 25px;
+ height: 25px;
+ line-height: 24px;
+ cursor: pointer;
+ color: #000;
+ opacity: 0.5;
+ filter: alpha(opacity=50) ;
+ text-align: center;
+ border: 1px solid #000;
+ border-color: rgba(0, 0, 0, 0.3);
+ border-radius: 50%;
+ -webkit-transition: opacity 200ms;
+ -moz-transition: opacity 200ms;
+ transition: opacity 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable:hover:after {
+ opacity: 1;
+ filter: none ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable:active:after {
+ background-color: #000;
+ color: #fff;
+ opacity: 0.3;
+ filter: alpha(opacity=30.0) ;
+ -webkit-transition: none 200ms;
+ -moz-transition: none 200ms;
+ transition: none 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.dark:after, .org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.error:after, .org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.system:after {
+ color: #fff;
+ border-color: #fff;
+ border-color: rgba(255, 255, 255, 0.3);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.dark:active:after, .org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.error:active:after, .org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.system:active:after {
+ background-color: #fff;
+ color: #000;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.tray:after {
+ top: 16px;
+ margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.success, .org_osbee_vaadin_addons_designer_overlay .v-Notification.failure {
+ background: #fff;
+ color: #555;
+ border: 2px solid #2c9720;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.success .v-Notification-caption, .org_osbee_vaadin_addons_designer_overlay .v-Notification.failure .v-Notification-caption {
+ color: #2c9720;
+ font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.success .v-Notification-caption:before, .org_osbee_vaadin_addons_designer_overlay .v-Notification.failure .v-Notification-caption:before {
+ font-family: ThemeIcons;
+ content: "\f00c";
+ margin-right: 0.5em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.success.bar, .org_osbee_vaadin_addons_designer_overlay .v-Notification.failure.bar {
+ margin: -2px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.failure {
+ border-color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.failure .v-Notification-caption {
+ color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.failure .v-Notification-caption:before {
+ content: "\f05e";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu {
+ height: 100%;
+ background-color: #4b4b4b;
+ background-image: -webkit-linear-gradient(right, #414141 0%, #4b4b4b 9px);
+ background-image: linear-gradient(to left,#414141 0%, #4b4b4b 9px);
+ color: #a5a5a5;
+ font-size: 14px;
+ line-height: 30px;
+ border-right: 1px solid #3b3b3b;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-toggle {
+ display: none;
+ position: fixed;
+ z-index: 200;
+ top: 3px;
+ left: 3px;
+ min-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part {
+ border-left: 1px solid #414141;
+ height: 100%;
+ padding-bottom: 37px;
+ overflow: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part:first-child {
+ border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title, .org_osbee_vaadin_addons_designer_overlay .valo-menu-subtitle, .org_osbee_vaadin_addons_designer_overlay .valo-menu-item {
+ display: block;
+ line-height: inherit;
+ white-space: nowrap;
+ position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title .valo-menu-badge, .org_osbee_vaadin_addons_designer_overlay .valo-menu-subtitle .valo-menu-badge, .org_osbee_vaadin_addons_designer_overlay .valo-menu-item .valo-menu-badge {
+ position: absolute;
+ right: 19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title {
+ line-height: 1.2;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ color: white;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+ padding: 12px 19px;
+ font-size: 14px;
+ border-bottom: 1px solid #1362b1;
+ -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-menubar.v-menubar {
+ background: transparent;
+ border-color: #1362b1;
+ color: inherit;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ text-shadow: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-menubar-menuitem {
+ background: transparent;
+ -webkit-box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca;
+ box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca;
+ text-shadow: inherit;
+ font-size: 16px;
+ border-color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title h1, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title h2, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title h3, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title h4, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-label-h4 {
+ margin-top: 0;
+ margin-bottom: 0;
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu {
+ border: none;
+ border-radius: 0;
+ padding: 1px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ text-shadow: none;
+ background: transparent;
+ color: inherit;
+ margin: 19px 7px;
+ display: block;
+ overflow: hidden;
+ text-align: center;
+ height: auto;
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu:focus:after {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border: none;
+ margin-right: 1px;
+ border-radius: 4px;
+ color: #197de1;
+ padding: 0 12px;
+ -webkit-transition: color 140ms;
+ -moz-transition: color 140ms;
+ transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:first-child, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:last-child, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:first-child:last-child {
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:before {
+ content: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:hover {
+ color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:active {
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-checked, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-checked:first-child {
+ border: 1px solid #c5c5c5;
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-checked .v-menubar-menuitem-caption, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-checked:first-child .v-menubar-menuitem-caption {
+ position: relative;
+ top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-selected {
+ color: #ecf2f8;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-selected:hover {
+ color: #ecf2f8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-disabled, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-disabled:hover {
+ color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu > .v-menubar-menuitem {
+ color: inherit;
+ white-space: normal;
+ line-height: 1.4;
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu > .v-menubar-menuitem img.v-icon {
+ width: 56px;
+ height: 56px;
+ border-radius: 29px;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ display: block;
+ margin: 0 auto 0.3em;
+ border: 1px solid #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu > .v-menubar-menuitem:after {
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-selected {
+ background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-subtitle {
+ color: #868686;
+ margin: 7px 0 7px 19px;
+ border-bottom: 1px solid #666666;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-subtitle [class*="badge"] {
+ color: #73a5d7;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menuitems {
+ display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item {
+ outline: none;
+ font-weight: 400;
+ padding: 0 37px 0 19px;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+ text-shadow: 0 2px 0 rgba(0, 0, 0, 0.05);
+ -webkit-transition: background-color 300ms, color 60ms;
+ -moz-transition: background-color 300ms, color 60ms;
+ transition: background-color 300ms, color 60ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item [class*="caption"] {
+ vertical-align: middle;
+ display: inline-block;
+ width: 90%;
+ max-width: 15em;
+ padding-right: 19px;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item [class*="badge"] {
+ color: #73a5d7;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item.selected {
+ background: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item.selected .v-icon {
+ color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item.selected [class*="badge"] {
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ color: #c8dbed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item:focus, .org_osbee_vaadin_addons_designer_overlay .valo-menu-item:hover, .org_osbee_vaadin_addons_designer_overlay .valo-menu-item.selected {
+ color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item span.v-icon {
+ min-width: 1em;
+ margin-right: 19px;
+ text-align: center;
+ vertical-align: middle;
+ -webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(black), to(rgba(0, 0, 0, 0.75)));
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item span.v-icon + span {
+ margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item [class*="badge"] {
+ background-color: #585858;
+ -webkit-transition: background-color 300ms;
+ -moz-transition: background-color 300ms;
+ transition: background-color 300ms;
+ line-height: 1;
+ padding: 4px 6px;
+ min-width: 11px;
+ text-align: center;
+ top: 4px;
+ border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons {
+ background-color: #4b4b4b;
+ min-width: 74px;
+ max-width: 111px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-title {
+ font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-title .v-label-undef-w {
+ white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .v-menubar-user-menu {
+ margin-left: 0;
+ margin-right: 0;
+ font-size: 11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .v-menubar-user-menu img.v-icon {
+ width: 28px;
+ height: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons [class*="subtitle"] {
+ margin: 9px 0 0;
+ padding: 7px 25px 7px 9px;
+ line-height: 1;
+ border: none;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ background: #3c3c3c;
+ font-size: 13px;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons [class*="subtitle"] [class*="badge"] {
+ right: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons [class*="subtitle"] + .valo-menu-item {
+ border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item {
+ display: block;
+ font-size: 26px;
+ line-height: 1;
+ padding: 12px;
+ text-align: center;
+ border-top: 1px solid #555555;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item:first-child {
+ border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item [class*="caption"] {
+ display: block;
+ width: auto;
+ margin: 0.3em 0 0;
+ padding: 0;
+ font-size: 11px;
+ line-height: 1.3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item .v-icon {
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item span.v-icon {
+ opacity: 0.8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item.selected {
+ background: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item.selected .v-icon {
+ opacity: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item.selected [class*="badge"] {
+ border-color: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item [class*="badge"] {
+ padding-left: 4px;
+ padding-right: 4px;
+ top: 7px;
+ right: 7px;
+ border: 2px solid #4b4b4b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-logo {
+ display: block;
+ overflow: hidden;
+ width: 44px !important;
+ height: 44px;
+ border-radius: 4px;
+ text-align: center;
+ background-color: #197de1;
+ background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+ background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+ color: white;
+ font-size: 25px;
+ line-height: 44px;
+ margin: 19px auto;
+ -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-logo:focus {
+ outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part {
+ background-color: #4b4b4b;
+ min-width: 74px;
+ max-width: 111px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-title {
+ font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-title .v-label-undef-w {
+ white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .v-menubar-user-menu {
+ margin-left: 0;
+ margin-right: 0;
+ font-size: 11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .v-menubar-user-menu img.v-icon {
+ width: 28px;
+ height: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part [class*="subtitle"] {
+ margin: 9px 0 0;
+ padding: 7px 25px 7px 9px;
+ line-height: 1;
+ border: none;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ background: #3c3c3c;
+ font-size: 13px;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part [class*="subtitle"] [class*="badge"] {
+ right: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part [class*="subtitle"] + .valo-menu-item {
+ border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item {
+ display: block;
+ font-size: 26px;
+ line-height: 1;
+ padding: 12px;
+ text-align: center;
+ border-top: 1px solid #555555;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item:first-child {
+ border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item [class*="caption"] {
+ display: block;
+ width: auto;
+ margin: 0.3em 0 0;
+ padding: 0;
+ font-size: 11px;
+ line-height: 1.3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item .v-icon {
+ margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item span.v-icon {
+ opacity: 0.8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item.selected {
+ background: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item.selected .v-icon {
+ opacity: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item.selected [class*="badge"] {
+ border-color: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item [class*="badge"] {
+ padding-left: 4px;
+ padding-right: 4px;
+ top: 7px;
+ right: 7px;
+ border: 2px solid #4b4b4b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] {
+ padding-top: 37px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .v-loading-indicator {
+ top: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] > .v-widget {
+ position: relative !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu {
+ border-right: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu-part {
+ overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu-toggle {
+ display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu-title {
+ position: fixed;
+ z-index: 100;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 37px !important;
+ padding-top: 0;
+ padding-bottom: 0;
+ -webkit-backface-visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu .v-menubar-user-menu {
+ position: fixed;
+ z-index: 100;
+ top: 0;
+ right: 0;
+ margin: 0;
+ padding: 0;
+ height: 37px;
+ color: #97bee5;
+ max-width: 30%;
+ -webkit-backface-visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu .v-menubar-user-menu .v-menubar-menuitem {
+ line-height: 36px;
+ white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu .v-menubar-user-menu img.v-icon {
+ display: inline-block;
+ margin: 0 6px 0 0;
+ width: 19px;
+ height: 19px;
+ border-radius: 10px;
+ border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menuitems {
+ height: 100%;
+ background-color: #4b4b4b;
+ background-image: -webkit-linear-gradient(right, #414141 0%, #4b4b4b 9px);
+ background-image: linear-gradient(to left,#414141 0%, #4b4b4b 9px);
+ color: #a5a5a5;
+ font-size: 14px;
+ line-height: 30px;
+ border-right: 1px solid #3b3b3b;
+ white-space: nowrap;
+ position: fixed;
+ z-index: 9000;
+ top: 37px;
+ bottom: 0;
+ height: auto;
+ max-width: 100%;
+ overflow: auto;
+ padding: 19px 0;
+ -webkit-transform: translatex(-100%);
+ -moz-transform: translatex(-100%);
+ -ms-transform: translatex(-100%);
+ -o-transform: translatex(-100%);
+ transform: translatex(-100%);
+ -webkit-transition: all 300ms;
+ -moz-transition: all 300ms;
+ transition: all 300ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu-visible .valo-menuitems {
+ -webkit-transform: translatex(0%);
+ -moz-transform: translatex(0%);
+ -ms-transform: translatex(0%);
+ -o-transform: translatex(0%);
+ transform: translatex(0%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-500px"] .valo-menu-toggle .v-button-caption {
+ display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-500px"] .valo-menu .v-menubar-user-menu .v-menubar-menuitem-caption {
+ display: inline-block;
+ width: 19px;
+ overflow: hidden;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/.project b/org.eclipse.osbp.vaadin.addons.designer.overlay/.project
new file mode 100644
index 0000000..bcf7e85
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/.project
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaadin.addons.designer.overlay</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.vaadin.integration.eclipse.widgetsetBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>com.vaadin.integration.eclipse.widgetsetNature</nature>
+ <nature>org.apache.ivyde.eclipse.ivynature</nature>
+ <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/LICENSE.txt b/org.eclipse.osbp.vaadin.addons.designer.overlay/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f464b05
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/MANIFEST.MF
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Bnd-LastModified: 1491902102912
+Build-Jdk: 1.8.0_91
+Built-By: mollik
+Bundle-ActivationPolicy: lazy
+Bundle-Description: A parent POM aimed to set up the build of general Ma
+ ven based projects.
+Bundle-DocURL: http://www.eclipse.org/osbp
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaadin.addons.designer.overlay
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-SymbolicName: org.eclipse.osbp.vaadin.addons.designer.overlay
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Created-By: Apache Maven Bundle Plugin
+Export-Package: org.eclipse.osbp.vaadin.addons.designer.overlay;version=
+ "0.9.0",org.eclipse.osbp.vaadin.addons.designer.overlay.client;version=
+ "0.9.0",org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+ version="0.9.0",org.eclipse.osbp.vaadin.addons.designer.overlay.public.
+ designer_overlay;version="0.9.0"
+Import-Package: javax.servlet.annotation;resolution:=optional;version="[
+ 3.0,4)",com.vaadin.annotations;version="[7.7,8)",com.vaadin.client;vers
+ ion="[7.7,8)",com.vaadin.client.communication;version="[7.7,8)",com.vaa
+ din.server;version="[7.7,8)",com.vaadin.ui;version="[7.7,8)",org.eclips
+ e.osbp.vaadin.addons.designer.overlay.client;version="[0.9,1)",org.ecli
+ pse.osbp.vaadin.addons.designer.overlay.client.widgets;version="[0.9,1)
+ ",org.junit
+Require-Bundle: com.vaadin.server;bundle-version="[7.5.7,7.7.0)",com.vaa
+ din.client;bundle-version="[7.5.7,7.7.0)",com.vaadin.shared;bundle-vers
+ ion="[7.5.7,7.7.0)",org.jsoup;bundle-version="[1.8.3,1.8.4)"
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
+Tool: Bnd-3.2.0.201605172007
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/git.properties b/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/git.properties
new file mode 100644
index 0000000..f8505c5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/git.properties
@@ -0,0 +1,14 @@
+#Generated by Git-Commit-Id-Plugin
+#Tue Apr 11 11:17:33 CEST 2017
+git.remote.origin.url=ssh\://compex@10.1.13.14/osbpgit/org.eclipse.osbp.vaadin.addons.git
+git.closest.tag.name=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
+git.commit.id.describe-short=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.time=02.02.2017 @ 18\:04\:55 MEZ
+git.commit.message.full=remove the feature from build
+git.commit.message.short=remove the feature from build
+git.commit.id.abbrev=90dd482
+git.branch=OSBP-initial-commit-2-Eclipse-4-luna
+git.closest.tag.commit.count=0
+git.commit.id.describe=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.id=90dd482e5bc78cd1a404d12445cebc868ee417b0
+git.tags=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.designer.overlay.launch b/org.eclipse.osbp.vaadin.addons.designer.overlay/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.designer.overlay.launch
new file mode 100644
index 0000000..c8dc517
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.designer.overlay.launch
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="org.eclipse.osbp.vaadin.addons.designer.overlay"/> </runtimeClasspathEntry> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.vaadin.addons.designer.overlay/src" path="3" type="2"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.vaadin.addons.designer.overlay/sample" path="3" type="2"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.vaadin.addons.designer.overlay/test" path="3" type="2"/> "/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.codeserver.CodeServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value=" org.eclipse.osbp.vaadin.addons.designer.overlay.OverlayWidgetset"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osbp.vaadin.addons.designer.overlay"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xss8M -Xmx512M -XX:MaxPermSize=512M"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="/Users/florianpirchner/Work/dev/osbp_client/git/org.eclipse.osbp.vaadin.addons/org.eclipse.osbp.vaadin.addons.designer.overlay"/>
+</launchConfiguration>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/epl-v10.html b/org.eclipse.osbp.vaadin.addons.designer.overlay/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/ivy.xml b/org.eclipse.osbp.vaadin.addons.designer.overlay/ivy.xml
new file mode 100644
index 0000000..7d808a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/ivy.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE ivy-module [
+ <!ENTITY vaadin.version "7.5.7">
+]>
+<ivy-module version="2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+ <info organisation="com.example" module="v7proj" />
+ <configurations>
+ <!-- The default configuration, which should be deployed to the server -->
+ <conf name="default" />
+ <!-- A configuration only needed when compiling the widget set. Should
+ not be deployed to the server -->
+ <conf name="widgetset-compile" />
+ <!-- A configuration used in compilation of server side classes only.
+ Should be deployed to the server -->
+ <conf name="nodeploy" />
+ </configurations>
+ <dependencies defaultconf="default" defaultconfmapping="default->default">
+ <!-- The core server part of Vaadin -->
+ <dependency org="com.vaadin" name="vaadin-server" rev="&vaadin.version;" />
+
+ <!-- Vaadin themes -->
+ <dependency org="com.vaadin" name="vaadin-themes" rev="&vaadin.version;" />
+
+ <!-- Push support -->
+ <dependency org="com.vaadin" name="vaadin-push" rev="&vaadin.version;" />
+
+ <!-- Servlet 3.0 API -->
+ <dependency org="javax.servlet" name="javax.servlet-api" rev="3.0.1" conf="nodeploy->default" />
+
+ <!-- TestBench 4 -->
+ <dependency org="com.vaadin" name="vaadin-testbench-api" rev="latest.release" conf="nodeploy -> default" />
+
+ <!-- Precompiled DefaultWidgetSet -->
+ <dependency org="com.vaadin" name="vaadin-client-compiled"
+ rev="&vaadin.version;" />
+
+ <!-- Vaadin client side, needed for widget set compilation -->
+ <dependency org="com.vaadin" name="vaadin-client" rev="&vaadin.version;"
+ conf="widgetset-compile->default" />
+
+ <!-- Compiler for custom widget sets. Should not be deployed -->
+ <dependency org="com.vaadin" name="vaadin-client-compiler"
+ rev="&vaadin.version;" conf="widgetset-compile->default" />
+ </dependencies>
+</ivy-module>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/ivysettings.xml b/org.eclipse.osbp.vaadin.addons.designer.overlay/ivysettings.xml
new file mode 100644
index 0000000..9c0f653
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/ivysettings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivysettings>
+ <settings defaultResolver="default" />
+ <resolvers>
+ <chain name="default">
+ <!-- Public Maven repository -->
+ <ibiblio name="public" m2compatible="true" />
+
+ <!-- Vaadin Add-on repository -->
+ <ibiblio name="vaadin-addons" usepoms="true" m2compatible="true"
+ root="http://maven.vaadin.com/vaadin-addons" />
+
+ <!-- Vaadin snapshots repository -->
+ <ibiblio name="vaadin-snapshots" usepoms="true" m2compatible="true"
+ root="https://oss.sonatype.org/content/repositories/vaadin-snapshots" />
+ <!-- Repository used for Vaadin modified smartsprites library -->
+ <dual name="custom-smartsprites">
+ <filesystem name="smartsprites-ivy">
+ <ivy pattern="${basedir}/ivymodule/[module]-ivy-[revision].xml" />
+ </filesystem>
+ <url name="smartsprites-artifact">
+ <artifact
+ pattern="http://dev.vaadin.com/svn/versions/6.8/build/smartsprites/lib/[artifact](-[revision]).[ext]" />
+ </url>
+ </dual>
+ </chain>
+ </resolvers>
+ <modules>
+ <!-- Vaadin patched SmartSprites -->
+ <module organisation="com.carrotsearch" name="smartsprites"
+ revision="0.2.3-itmill" resolver="custom-smartsprites" />
+ </modules>
+
+
+</ivysettings>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/license.html b/org.eclipse.osbp.vaadin.addons.designer.overlay/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse Foundation
+source code
+ repository ("Repository") in software modules ("Modules") and made
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+Fragments and associated material. Each Feature may be packaged as a
+sub-directory in a directory named "features". Within a Feature, files
+named "feature.xml" may contain a list of the names and version numbers
+of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+Features"). Within a Feature, files named "feature.xml" may contain a
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+ SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software,
+examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of
+allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning
+Technology
+ in accordance with the Specification. By using Provisioning
+Technology in such a manner and making it available in accordance with
+the
+ Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in
+which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing,
+extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable
+Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+Software Agreement must inform the user of the terms and conditions that
+ govern
+ the Installable Software and must solicit acceptance by the end
+user in the manner prescribed in such Installable Software Agreement.
+Upon such
+ indication of agreement by the user, the provisioning Technology
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use,
+and/or re-export to
+ another country, of encryption software. BEFORE using any encryption
+software, please check the country's laws, regulations and policies
+concerning the import,
+ possession, or use, and re-export of encryption software, to see if
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/pom.xml b/org.eclipse.osbp.vaadin.addons.designer.overlay/pom.xml
new file mode 100644
index 0000000..cb11805
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/pom.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.osbp.releng.maven</groupId>
+ <artifactId>org.eclipse.osbp.releng.maven.parent.mbp</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath />
+ </parent>
+
+ <groupId>org.eclipse.osbp.vaadin.addons</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.addons.designer.overlay</artifactId>
+ <packaging>bundle</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-server</artifactId>
+ <version>${vaadin.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-client</artifactId>
+ <version>${vaadin.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.0.1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>${basedir}/src</sourceDirectory>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.0</version>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+
+ <!--<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId>
+ <version>2.3.1</version> <configuration> <archive> <index>true</index> <manifestEntries>
+ <Bundle-SymbolicName>org.eclipse.osbp.vaadin.addons.absolutelayout</Bundle-SymbolicName>
+ <Vaadin-Stylesheets>/VAADIN/addons/osbee/vaadin/addons/absolutelayout/styles.scss</Vaadin-Stylesheets>
+ </manifestEntries> </archive> </configuration> </plugin> -->
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-Name>OSBP Addon for Vaadin: Designer Overlay</Bundle-Name>
+ <Bundle-SymbolicName>org.eclipse.osbp.vaadin.addons.designer.overlay</Bundle-SymbolicName>
+ <Bundle-Version>0.9.0.{osgi-version-qualifier}</Bundle-Version>
+ <Require-Bundle>com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+ org.jsoup;bundle-version="[1.8.3,1.8.4)"
+ </Require-Bundle>
+ <Import-Package>
+ javax.servlet.annotation;resolution:=optional,
+ *
+ </Import-Package>
+ <Export-Package>
+ !LICENSE,!LICENSE.txt,!THIRD-PARTY.txt,!NOTICE,!README.txt,!VERSION.txt,!build.properties,
+ !VAADIN.*,
+ org.eclipse.osbp.vaadin.addons.*;version="0.9.0"
+ </Export-Package>
+ <Include-Resource>{maven-resources},LICENSE.txt,epl-v10.html</Include-Resource>
+ <_nouses>true</_nouses>
+ </instructions>
+ </configuration>
+ </plugin>
+ <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.9</version> <executions> <execution> <id>attach-javadoc</id> <goals>
+ <goal>jar</goal> </goals> </execution> </executions> </plugin> -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.2.1</version>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+
+ <!--This plugin's configuration is used to store Eclipse m2e settings
+ only. It has no influence on the Maven build itself. -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.maven.plugins
+ </groupId>
+ <artifactId>
+ maven-dependency-plugin
+ </artifactId>
+ <versionRange>
+ [2.0.0,)
+ </versionRange>
+ <goals>
+ <goal>
+ copy-dependencies
+ </goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>com.vaadin</groupId>
+ <artifactId>
+ vaadin-maven-plugin
+ </artifactId>
+ <versionRange>
+ [7.0-SNAPSHOT,)
+ </versionRange>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <!-- This is needed for the sources required by the client-side compiler
+ to be included in the produced JARs -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ </resource>
+ </resources>
+
+ </build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/sample/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplication.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/sample/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplication.java
new file mode 100644
index 0000000..422fb70
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/sample/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplication.java
@@ -0,0 +1,485 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay;
+
+import javax.servlet.annotation.WebServlet;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.AddChildEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.RemoveChildEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.ShowPropertiesEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.ShowPropertiesListener;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.SwitchEditableEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.server.ThemeResource;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+@Theme("valo")
+public class OverlayApplication extends UI {
+
+ @WebServlet(value = "/*", asyncSupported = true)
+ @VaadinServletConfiguration(productionMode = false, ui = OverlayApplication.class, widgetset = "org.eclipse.osbp.vaadin.addons.designer.overlay.OverlayWidgetset")
+ public static class Servlet extends VaadinServlet {
+ }
+
+ @Override
+ protected void init(VaadinRequest request) {
+
+ TabSheet tabSheet = new TabSheet();
+ tabSheet.setSizeFull();
+ setContent(tabSheet);
+
+ addGridlayout(tabSheet);
+ addHorizontallayout(tabSheet);
+ addVerticallayout(tabSheet);
+ addLayoutInlayout(tabSheet);
+ }
+
+ /**
+ * Add gridlayout to the tabsheet.
+ *
+ * @param tabSheet
+ */
+ private void addGridlayout(TabSheet tabSheet) {
+ final GridLayout gridLayout = new GridLayout(3, 3);
+ gridLayout.setSizeFull();
+ gridLayout.setMargin(true);
+ tabSheet.addTab(gridLayout, "GridLayout");
+
+ DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(gridLayout);
+ layoutExt.setSupportsAlignments(false);
+ layoutExt.setSupportsMargins(true);
+ layoutExt.setSupportsSpacing(true);
+ layoutExt.setSupportsPropertiesDialog(true);
+ layoutExt.setSupportsRemove(false);
+ layoutExt.setSupportsAdd(true);
+ layoutExt.setIcon(new ThemeResource("sample/sample.gif"));
+ layoutExt.addSwitchEditableListener(new DesignerOverlayExtension.SwitchEditableListener() {
+ @Override
+ public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
+ gridLayout.setEnabled(!gridLayout.isReadOnly());
+ }
+ });
+
+ layoutExt.addSwitchMarginListener(new DesignerOverlayExtension.SwitchMarginListener() {
+ @Override
+ public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+ gridLayout.setMargin(gridLayout.getMargin().getBitMask() == 0);
+ }
+ });
+
+ layoutExt.addSwitchSpacingListener(new DesignerOverlayExtension.SwitchSpacingListener() {
+ @Override
+ public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+ gridLayout.setSpacing(!gridLayout.isSpacing());
+ }
+ });
+
+ layoutExt.addShowPropertiesListener(new ShowPropertiesListener() {
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+ Notification.show("Requested properties dialog");
+ }
+ });
+
+ layoutExt.addAddChildListener(new DesignerOverlayExtension.AddChildListener() {
+ @Override
+ public void addChild(DesignerOverlayExtension.AddChildEvent event) {
+ gridLayout.addComponent(new TextField("added"));
+ }
+ });
+
+ addToGrid(gridLayout, 0, 0);
+ addToGrid(gridLayout, 0, 1);
+ addToGrid(gridLayout, 0, 2);
+ addToGrid(gridLayout, 1, 0);
+ addToGrid(gridLayout, 1, 1);
+ addToGrid(gridLayout, 1, 2);
+ addToGrid(gridLayout, 2, 0);
+ addToGrid(gridLayout, 2, 1);
+ addToGrid(gridLayout, 2, 2);
+ }
+
+ private void addToGrid(final GridLayout gridLayout, int col, int row) {
+ final Component text = new TextField("Text " + col + "/" + row);
+ text.setId("Text " + col + "/" + row);
+ gridLayout.addComponent(text, col, row);
+
+ DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
+ extension.setSupportsAlignments(true);
+ extension.setSupportsMargins(false);
+ extension.setSupportsSpacing(false);
+ extension.setSupportsPropertiesDialog(true);
+ extension.setSupportsRemove(true);
+ extension.setSupportsEditable(true);
+
+ extension.addAlignmentChangedListener(new DesignerOverlayExtension.AlignmentChangedListener() {
+ @Override
+ public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+ AlignmentInfoUtil.apply(gridLayout, text, event.getAlignment());
+ }
+ });
+
+ extension.addRemoveChildListener(new DesignerOverlayExtension.RemoveChildListener() {
+ @Override
+ public void removeChild(RemoveChildEvent event) {
+ gridLayout.removeComponent(event.getComponent());
+ }
+ });
+
+ extension.addSwitchEditableListener(new DesignerOverlayExtension.SwitchEditableListener() {
+ @Override
+ public void switchEditable(SwitchEditableEvent event) {
+ text.setReadOnly(!text.isReadOnly());
+ }
+ });
+
+ extension.addShowPropertiesListener(new ShowPropertiesListener() {
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+ Notification.show("Requested properties dialog");
+ }
+ });
+
+ extension.getState().alignment = AlignmentInfo.MIDDLE_CENTER;
+ AlignmentInfoUtil.apply(gridLayout, text, AlignmentInfo.MIDDLE_CENTER);
+ }
+
+ /**
+ * Add verticallayout to the tabsheet.
+ *
+ * @param tabSheet
+ */
+ private void addVerticallayout(TabSheet tabSheet) {
+ final VerticalLayout verticalLayout = new VerticalLayout();
+ verticalLayout.setSizeFull();
+ verticalLayout.setMargin(true);
+ tabSheet.addTab(verticalLayout, "VerticalLayout");
+
+ DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(verticalLayout);
+ layoutExt.setSupportsAlignments(false);
+ layoutExt.setSupportsMargins(true);
+ layoutExt.setSupportsSpacing(true);
+ layoutExt.setSupportsPropertiesDialog(true);
+ layoutExt.setSupportsRemove(false);
+ layoutExt.setSupportsAdd(true);
+ layoutExt.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+ @Override
+ public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
+ verticalLayout.setReadOnly(!verticalLayout.isReadOnly());
+ }
+
+ @Override
+ public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+ verticalLayout.setMargin(verticalLayout.getMargin().getBitMask() == 0);
+ }
+
+ @Override
+ public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+ verticalLayout.setSpacing(!verticalLayout.isSpacing());
+ }
+
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+ Notification.show("Requested properties dialog");
+ }
+
+ @Override
+ public void addChild(AddChildEvent event) {
+ addToVerticalLayout(verticalLayout, 10);
+ }
+ });
+
+ addToVerticalLayout(verticalLayout, 0);
+ addToVerticalLayout(verticalLayout, 1);
+ addToVerticalLayout(verticalLayout, 2);
+ addToVerticalLayout(verticalLayout, 3);
+ addToVerticalLayout(verticalLayout, 4);
+ addToVerticalLayout(verticalLayout, 5);
+ }
+
+ private void addToVerticalLayout(final VerticalLayout verticalLayout, int index) {
+ final TextField text = new TextField("Mouse over " + index);
+ text.setId("Mouse over " + index);
+ verticalLayout.addComponent(text);
+
+ DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
+ extension.setSupportsAlignments(true);
+ extension.setSupportsMargins(false);
+ extension.setSupportsSpacing(false);
+ extension.setSupportsPropertiesDialog(true);
+ extension.setSupportsRemove(true);
+ extension.setSupportsEditable(true);
+
+ extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+ @Override
+ public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+ AlignmentInfoUtil.apply(verticalLayout, text, event.getAlignment());
+ }
+
+ @Override
+ public void removeChild(RemoveChildEvent event) {
+ verticalLayout.removeComponent(event.getComponent());
+ }
+
+ @Override
+ public void switchEditable(SwitchEditableEvent event) {
+ text.setReadOnly(!text.isReadOnly());
+ }
+
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+ Notification.show("Requested properties dialog");
+ }
+ });
+
+ extension.getState().alignment = AlignmentInfo.TOP_CENTER;
+ AlignmentInfoUtil.apply(verticalLayout, text, AlignmentInfo.TOP_CENTER);
+ }
+
+ /**
+ * Add horizontallayout to the tabsheet.
+ *
+ * @param tabSheet
+ */
+ private void addHorizontallayout(TabSheet tabSheet) {
+ final HorizontalLayout horizontalLayout = new HorizontalLayout();
+ horizontalLayout.setSizeFull();
+ horizontalLayout.setMargin(true);
+ tabSheet.addTab(horizontalLayout, "HorizontalLayout");
+
+ DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(horizontalLayout);
+ layoutExt.setSupportsAlignments(false);
+ layoutExt.setSupportsMargins(true);
+ layoutExt.setSupportsSpacing(true);
+ layoutExt.setSupportsPropertiesDialog(true);
+ layoutExt.setSupportsRemove(false);
+ layoutExt.setSupportsAdd(true);
+ layoutExt.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+ @Override
+ public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
+ horizontalLayout.setReadOnly(!horizontalLayout.isReadOnly());
+ }
+
+ public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+ horizontalLayout.setMargin(horizontalLayout.getMargin().getBitMask() == 0);
+ }
+
+ public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+ horizontalLayout.setSpacing(!horizontalLayout.isSpacing());
+ }
+
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+ Notification.show("Requested properties dialog");
+ }
+
+ @Override
+ public void addChild(AddChildEvent event) {
+ addToHorizontalLayout(horizontalLayout, 10);
+ }
+ });
+
+ addToHorizontalLayout(horizontalLayout, 0);
+ addToHorizontalLayout(horizontalLayout, 1);
+ addToHorizontalLayout(horizontalLayout, 2);
+ addToHorizontalLayout(horizontalLayout, 3);
+ }
+
+ private void addToHorizontalLayout(final HorizontalLayout horizontalLayout, int index) {
+ final TextField text = new TextField("Mouse over " + index);
+ text.setId("Mouse over " + index);
+ horizontalLayout.addComponent(text);
+
+ DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
+ extension.setSupportsAlignments(true);
+ extension.setSupportsMargins(false);
+ extension.setSupportsSpacing(false);
+ extension.setSupportsPropertiesDialog(true);
+ extension.setSupportsRemove(true);
+ extension.setSupportsEditable(true);
+
+ extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+ @Override
+ public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+ AlignmentInfoUtil.apply(horizontalLayout, text, event.getAlignment());
+ }
+
+ @Override
+ public void removeChild(RemoveChildEvent event) {
+ horizontalLayout.removeComponent(event.getComponent());
+ }
+
+ @Override
+ public void switchEditable(SwitchEditableEvent event) {
+ text.setReadOnly(!text.isReadOnly());
+ }
+
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+ Notification.show("Requested properties dialog");
+ }
+ });
+
+ extension.getState().alignment = AlignmentInfo.TOP_CENTER;
+ AlignmentInfoUtil.apply(horizontalLayout, text, AlignmentInfo.TOP_CENTER);
+ }
+
+ /**
+ * Add texts in horizontal layouts in verticallayout to the tabsheet.
+ *
+ * @param tabSheet
+ */
+ private void addLayoutInlayout(TabSheet tabSheet) {
+ final VerticalLayout verticalLayout = new VerticalLayout();
+ verticalLayout.setSizeFull();
+ verticalLayout.setMargin(true);
+ tabSheet.addTab(verticalLayout, "Layout in Layout");
+
+ DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(verticalLayout);
+ layoutExt.setSupportsAlignments(false);
+ layoutExt.setSupportsMargins(true);
+ layoutExt.setSupportsSpacing(true);
+ layoutExt.setSupportsPropertiesDialog(true);
+ layoutExt.setSupportsRemove(false);
+
+ layoutExt.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+
+ @Override
+ public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
+ verticalLayout.setReadOnly(!verticalLayout.isReadOnly());
+ }
+
+ @Override
+ public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+ verticalLayout.setMargin(verticalLayout.getMargin().getBitMask() == 0);
+ }
+
+ @Override
+ public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+ verticalLayout.setSpacing(!verticalLayout.isSpacing());
+ }
+
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+ Notification.show("Requested properties dialog");
+ }
+ });
+
+ addToLayoutInLayout(verticalLayout, 0);
+ addToLayoutInLayout(verticalLayout, 1);
+ addToLayoutInLayout(verticalLayout, 2);
+ addToLayoutInLayout(verticalLayout, 3);
+ addToLayoutInLayout(verticalLayout, 4);
+ addToLayoutInLayout(verticalLayout, 5);
+ }
+
+ private void addToLayoutInLayout(final VerticalLayout verticalLayout, int index) {
+ final HorizontalLayout hl = new HorizontalLayout();
+ verticalLayout.addComponent(hl);
+
+ DesignerOverlayExtension extension = DesignerOverlayExtension.create(hl);
+ extension.setSupportsAlignments(true);
+ extension.setSupportsMargins(true);
+ extension.setSupportsSpacing(true);
+ extension.setSupportsPropertiesDialog(true);
+ extension.setSupportsRemove(true);
+
+ extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+ @Override
+ public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+ AlignmentInfoUtil.apply(verticalLayout, hl, event.getAlignment());
+ }
+
+ @Override
+ public void removeChild(RemoveChildEvent event) {
+ verticalLayout.removeComponent(event.getComponent());
+ }
+
+ @Override
+ public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+ hl.setMargin(hl.getMargin().getBitMask() == 0);
+ }
+
+ @Override
+ public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+ hl.setSpacing(!hl.isSpacing());
+ }
+
+ @Override
+ public void switchEditable(SwitchEditableEvent event) {
+ hl.setReadOnly(!hl.isReadOnly());
+ }
+
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+ Notification.show("Requested properties dialog");
+ }
+ });
+
+ extension.getState().alignment = AlignmentInfo.TOP_CENTER;
+ AlignmentInfoUtil.apply(verticalLayout, hl, AlignmentInfo.TOP_CENTER);
+
+ addToHorizontalLayoutNoAlignment(hl, 0);
+ addToHorizontalLayoutNoAlignment(hl, 1);
+ addToHorizontalLayoutNoAlignment(hl, 2);
+ addToHorizontalLayoutNoAlignment(hl, 3);
+ addToHorizontalLayoutNoAlignment(hl, 4);
+ addToHorizontalLayoutNoAlignment(hl, 5);
+ }
+
+ private void addToHorizontalLayoutNoAlignment(final HorizontalLayout horizontalLayout, int index) {
+ final TextField text = new TextField("Mouse over " + index);
+ text.setId("Mouse over " + index);
+ text.setSizeFull();
+ horizontalLayout.addComponent(text);
+
+ DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
+ extension.setSupportsAlignments(false);
+ extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+ @Override
+ public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+ AlignmentInfoUtil.apply(horizontalLayout, text, event.getAlignment());
+ }
+
+ @Override
+ public void removeChild(RemoveChildEvent event) {
+ horizontalLayout.removeComponent(event.getComponent());
+ }
+
+ @Override
+ public void switchEditable(SwitchEditableEvent event) {
+ text.setReadOnly(!text.isReadOnly());
+ }
+
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+ Notification.show("Requested properties dialog");
+ }
+ });
+
+ AlignmentInfoUtil.apply(horizontalLayout, text, AlignmentInfo.FILL_FILL);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/AlignmentInfoUtil.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/AlignmentInfoUtil.java
new file mode 100644
index 0000000..b33da83
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/AlignmentInfoUtil.java
@@ -0,0 +1,175 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.VerticalLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Util to deal with {@link AlignmentInfo}.
+ */
+public class AlignmentInfoUtil {
+
+ /**
+ * Returns the horizontal width for the given alignment.
+ *
+ * @param alignment the alignment
+ * @return the horizonal width
+ */
+ public static String getHorizonalWidth(AlignmentInfo alignment) {
+ if (alignment.isHorizontalFill()) {
+ return "100%";
+ } else {
+ return "-1px";
+ }
+ }
+
+ /**
+ * Returns the vertical height for the given alignment.
+ *
+ * @param alignment the alignment
+ * @return the vertical height
+ */
+ public static String getVerticalHeight(AlignmentInfo alignment) {
+ if (alignment.isVerticalFill()) {
+ return "100%";
+ } else {
+ return "-1px";
+ }
+ }
+
+ /**
+ * Converts alignment info to vaadin alignment.
+ *
+ * @param alignment the alignment
+ * @return the alignment
+ */
+ public static Alignment toVaadin(AlignmentInfo alignment) {
+ switch (alignment) {
+ case BOTTOM_CENTER:
+ return Alignment.BOTTOM_CENTER;
+ case BOTTOM_LEFT:
+ return Alignment.BOTTOM_LEFT;
+ case BOTTOM_RIGHT:
+ return Alignment.BOTTOM_RIGHT;
+ case MIDDLE_CENTER:
+ return Alignment.MIDDLE_CENTER;
+ case MIDDLE_LEFT:
+ return Alignment.MIDDLE_LEFT;
+ case MIDDLE_RIGHT:
+ return Alignment.MIDDLE_RIGHT;
+ case TOP_LEFT:
+ return Alignment.TOP_LEFT;
+ case TOP_RIGHT:
+ return Alignment.TOP_RIGHT;
+ case TOP_CENTER:
+ return Alignment.TOP_CENTER;
+ // fill here
+ case BOTTOM_FILL:
+ // fill the bottom line -> position at origin
+ return Alignment.BOTTOM_LEFT;
+ case MIDDLE_FILL:
+ // fill the middle line -> position at origin
+ return Alignment.MIDDLE_LEFT;
+ case TOP_FILL:
+ // fill the top line -> position at origin
+ return Alignment.TOP_LEFT;
+ case FILL_CENTER:
+ // fill the center row -> position at origin
+ return Alignment.TOP_CENTER;
+ case FILL_FILL:
+ // fill the all -> position at origin
+ return Alignment.TOP_LEFT;
+ case FILL_LEFT:
+ // fill the left row -> position at origin
+ return Alignment.TOP_LEFT;
+ case FILL_RIGHT:
+ // fill the right row -> position at origin
+ return Alignment.TOP_RIGHT;
+ }
+
+ return Alignment.TOP_LEFT;
+ }
+
+ /**
+ * Applies the alignment to the given layout and child.
+ *
+ * @param layout the layout
+ * @param child the child
+ * @param alignment the alignment
+ */
+ public static void apply(GridLayout layout, Component child, AlignmentInfo alignment) {
+ layout.setComponentAlignment(child, AlignmentInfoUtil.toVaadin(alignment));
+
+ child.setWidth(AlignmentInfoUtil.getHorizonalWidth(alignment));
+ child.setHeight(AlignmentInfoUtil.getVerticalHeight(alignment));
+
+ if (alignment.isHorizontalFill()) {
+ layout.setColumnExpandRatio(layout.getComponentArea(child).getColumn1(), 1.0f);
+ } else {
+ layout.setColumnExpandRatio(layout.getComponentArea(child).getColumn1(), 0f);
+ }
+
+ if (alignment.isVerticalFill()) {
+ layout.setRowExpandRatio(layout.getComponentArea(child).getRow1(), 1.0f);
+ } else {
+ layout.setRowExpandRatio(layout.getComponentArea(child).getRow1(), 0f);
+ }
+ }
+
+ /**
+ * Applies the alignment to the given layout and child.
+ *
+ * @param layout the layout
+ * @param child the child
+ * @param alignment the alignment
+ */
+ public static void apply(VerticalLayout layout, Component child, AlignmentInfo alignment) {
+ layout.setComponentAlignment(child, AlignmentInfoUtil.toVaadin(alignment));
+
+ child.setWidth(AlignmentInfoUtil.getHorizonalWidth(alignment));
+ child.setHeight(AlignmentInfoUtil.getVerticalHeight(alignment));
+
+ if (alignment.isVerticalFill()) {
+ layout.setExpandRatio(child, 1.0f);
+ } else {
+ layout.setExpandRatio(child, 0f);
+ }
+ }
+
+ /**
+ * Applies the alignment to the given layout and child.
+ *
+ * @param layout the layout
+ * @param child the child
+ * @param alignment the alignment
+ */
+ public static void apply(HorizontalLayout layout, Component child, AlignmentInfo alignment) {
+ layout.setComponentAlignment(child, AlignmentInfoUtil.toVaadin(alignment));
+
+ child.setWidth(AlignmentInfoUtil.getHorizonalWidth(alignment));
+ child.setHeight(AlignmentInfoUtil.getVerticalHeight(alignment));
+
+ if (alignment.isHorizontalFill()) {
+ layout.setExpandRatio(child, 1.0f);
+ } else {
+ layout.setExpandRatio(child, 0f);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/DesignerOverlayExtension.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/DesignerOverlayExtension.java
new file mode 100644
index 0000000..4bf2d40
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/DesignerOverlayExtension.java
@@ -0,0 +1,997 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.DesignerExtensionServerRpc;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.DesignerExtensionState;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+
+import com.vaadin.server.AbstractClientConnector;
+import com.vaadin.server.AbstractExtension;
+import com.vaadin.server.Resource;
+import com.vaadin.shared.ComponentConstants;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Component.Event;
+import com.vaadin.util.ReflectTools;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This extension adds an overlay to children of layouts. Listeners are being
+ * notified if events.
+ */
+@SuppressWarnings("serial")
+public class DesignerOverlayExtension extends AbstractExtension {
+
+ /** The owner. */
+ private Component owner;
+
+ /** The rpc. */
+ private DesignerExtensionServerRpc rpc = new DesignerExtensionServerRpc() {
+ @Override
+ public void alignmentChanged(AlignmentInfo alignment) {
+ fireEvent(new AlignmentChangedEvent(owner, alignment));
+ }
+
+ @Override
+ public void removeChild() {
+ fireEvent(new RemoveChildEvent(owner));
+ }
+
+ @Override
+ public void openProperties() {
+ fireEvent(new ShowPropertiesEvent(owner));
+ }
+
+ @Override
+ public void switchEditable() {
+ fireEvent(new SwitchEditableEvent(owner));
+ }
+
+ @Override
+ public void switchMargin() {
+ fireEvent(new SwitchMarginEvent(owner));
+ }
+
+ @Override
+ public void switchSpacing() {
+ fireEvent(new SwitchSpacingEvent(owner));
+ }
+
+ @Override
+ public void addChild() {
+ fireEvent(new AddChildEvent(owner));
+ }
+ };
+
+ /**
+ * Creates the.
+ *
+ * @param target
+ * the target
+ * @return the designer overlay extension
+ */
+ public static DesignerOverlayExtension create(Component target) {
+ DesignerOverlayExtension extension = new DesignerOverlayExtension();
+ extension.owner = target;
+ extension.extend((AbstractClientConnector) target);
+ return extension;
+ }
+
+ /**
+ * Instantiates a new designer overlay extension.
+ */
+ private DesignerOverlayExtension() {
+ registerRpc(rpc);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.server.AbstractClientConnector#getState()
+ */
+ @Override
+ protected DesignerExtensionState getState() {
+ return (DesignerExtensionState) super.getState();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.server.AbstractClientConnector#getState(boolean)
+ */
+ @Override
+ protected DesignerExtensionState getState(boolean markDirty) {
+ return (DesignerExtensionState) super.getState(markDirty);
+ }
+
+ /**
+ * Sets the icon to be shown at the overlay.
+ *
+ * @param source
+ * the new icon
+ */
+ public void setIcon(Resource source) {
+ setResource(ComponentConstants.ICON_RESOURCE, source);
+ }
+
+ /**
+ * Returns the icon which is shown at the overlay.
+ *
+ * @return the icon
+ */
+ public Resource getIcon() {
+ return getResource(ComponentConstants.ICON_RESOURCE);
+ }
+
+ /**
+ * Checks if is supports remove.
+ *
+ * @return true, if is supports remove
+ */
+ public boolean isSupportsRemove() {
+ return getState(false).supportsRemove;
+ }
+
+ /**
+ * Sets the supports remove.
+ *
+ * @param supportsRemove
+ * the new supports remove
+ */
+ public void setSupportsRemove(boolean supportsRemove) {
+ if (isSupportsRemove() != supportsRemove) {
+ getState(true).supportsRemove = supportsRemove;
+ }
+ }
+
+ /**
+ * Checks if is supports add.
+ *
+ * @return true, if is supports add
+ */
+ public boolean isSupportsAdd() {
+ return getState(false).supportsAdd;
+ }
+
+ /**
+ * Sets the supports add.
+ *
+ * @param supportsAdd
+ * the new supports add
+ */
+ public void setSupportsAdd(boolean supportsAdd) {
+ if (isSupportsAdd() != supportsAdd) {
+ getState(true).supportsAdd = supportsAdd;
+ }
+ }
+
+ /**
+ * Checks if is supports editable.
+ *
+ * @return true, if is supports editable
+ */
+ public boolean isSupportsEditable() {
+ return getState(false).supportsEditable;
+ }
+
+ /**
+ * Sets the supports editable.
+ *
+ * @param supportsEditable
+ * the new supports editable
+ */
+ public void setSupportsEditable(boolean supportsEditable) {
+ if (isSupportsEditable() != supportsEditable) {
+ getState(true).supportsEditable = supportsEditable;
+ }
+ }
+
+ /**
+ * Checks if is supports properties dialog.
+ *
+ * @return true, if is supports properties dialog
+ */
+ public boolean isSupportsPropertiesDialog() {
+ return getState(false).supportsPropertiesDialog;
+ }
+
+ /**
+ * Sets the supports properties dialog.
+ *
+ * @param supportsPropertiesDialog
+ * the new supports properties dialog
+ */
+ public void setSupportsPropertiesDialog(boolean supportsPropertiesDialog) {
+ if (isSupportsPropertiesDialog() != supportsPropertiesDialog) {
+ getState(true).supportsPropertiesDialog = supportsPropertiesDialog;
+ }
+ }
+
+ /**
+ * Checks if is supports margins.
+ *
+ * @return true, if is supports margins
+ */
+ public boolean isSupportsMargins() {
+ return getState(false).supportsMargins;
+ }
+
+ /**
+ * Sets the supports margins.
+ *
+ * @param supportsMargins
+ * the new supports margins
+ */
+ public void setSupportsMargins(boolean supportsMargins) {
+ if (isSupportsMargins() != supportsMargins) {
+ getState(true).supportsMargins = supportsMargins;
+ }
+ }
+
+ /**
+ * Checks if is supports spacing.
+ *
+ * @return true, if is supports spacing
+ */
+ public boolean isSupportsSpacing() {
+ return getState(false).supportsSpacing;
+ }
+
+ /**
+ * Sets the supports spacing.
+ *
+ * @param supportsSpacing
+ * the new supports spacing
+ */
+ public void setSupportsSpacing(boolean supportsSpacing) {
+ if (isSupportsSpacing() != supportsSpacing) {
+ getState(true).supportsSpacing = supportsSpacing;
+ }
+ }
+
+ /**
+ * Checks if is supports alignments.
+ *
+ * @return true, if is supports alignments
+ */
+ public boolean isSupportsAlignments() {
+ return getState(false).supportsAlignments;
+ }
+
+ /**
+ * Sets the supports alignments.
+ *
+ * @param supportsAlignments
+ * the new supports alignments
+ */
+ public void setSupportsAlignments(boolean supportsAlignments) {
+ if (isSupportsAlignments() != supportsAlignments) {
+ getState(true).supportsAlignments = supportsAlignments;
+ }
+ }
+
+ /**
+ * Gets the description remove.
+ *
+ * @return the descriptionRemove
+ */
+ public String getDescriptionRemove() {
+ return getState(false).descriptionRemove;
+ }
+
+ /**
+ * Sets the description remove.
+ *
+ * @param descriptionRemove
+ * the descriptionRemove to set
+ */
+ public void setDescriptionRemove(String descriptionRemove) {
+ getState(true).descriptionRemove = descriptionRemove;
+ }
+
+ /**
+ * Gets the description editable.
+ *
+ * @return the descriptionEditable
+ */
+ public String getDescriptionEditable() {
+ return getState(false).descriptionEditable;
+ }
+
+ /**
+ * Sets the description editable.
+ *
+ * @param descriptionEditable
+ * the descriptionEditable to set
+ */
+ public void setDescriptionEditable(String descriptionEditable) {
+ getState(true).descriptionEditable = descriptionEditable;
+ }
+
+ /**
+ * Gets the description properties dialog.
+ *
+ * @return the descriptionPropertiesDialog
+ */
+ public String getDescriptionPropertiesDialog() {
+ return getState(false).descriptionPropertiesDialog;
+ }
+
+ /**
+ * Sets the description properties dialog.
+ *
+ * @param descriptionPropertiesDialog
+ * the descriptionPropertiesDialog to set
+ */
+ public void setDescriptionPropertiesDialog(String descriptionPropertiesDialog) {
+ getState(true).descriptionPropertiesDialog = descriptionPropertiesDialog;
+ }
+
+ /**
+ * Gets the description margins.
+ *
+ * @return the descriptionMargins
+ */
+ public String getDescriptionMargins() {
+ return getState(false).descriptionMargins;
+ }
+
+ /**
+ * Sets the description margins.
+ *
+ * @param descriptionMargins
+ * the descriptionMargins to set
+ */
+ public void setDescriptionMargins(String descriptionMargins) {
+ getState(true).descriptionMargins = descriptionMargins;
+ }
+
+ /**
+ * Gets the description spacing.
+ *
+ * @return the descriptionSpacing
+ */
+ public String getDescriptionSpacing() {
+ return getState(false).descriptionSpacing;
+ }
+
+ /**
+ * Sets the description spacing.
+ *
+ * @param descriptionSpacing
+ * the descriptionSpacing to set
+ */
+ public void setDescriptionSpacing(String descriptionSpacing) {
+ getState(true).descriptionSpacing = descriptionSpacing;
+ }
+
+ /**
+ * Gets the description alignments.
+ *
+ * @return the descriptionAlignments
+ */
+ public String getDescriptionAlignments() {
+ return getState(false).descriptionAlignments;
+ }
+
+ /**
+ * Sets the description alignments.
+ *
+ * @param descriptionAlignments
+ * the descriptionAlignments to set
+ */
+ public void setDescriptionAlignments(String descriptionAlignments) {
+ getState(true).descriptionAlignments = descriptionAlignments;
+ }
+
+ /**
+ * Gets the description add.
+ *
+ * @return the descriptionAdd
+ */
+ public String getDescriptionAdd() {
+ return getState(false).descriptionAdd;
+ }
+
+ /**
+ * Sets the description add.
+ *
+ * @param descriptionAdd
+ * the descriptionAdd to set
+ */
+ public void setDescriptionAdd(String descriptionAdd) {
+ getState(true).descriptionAdd = descriptionAdd;
+ }
+
+ /**
+ * Adds the all event hanndler.
+ *
+ * @param handler
+ * the handler
+ */
+ public void addAllEventHanndler(AllEventHanndler handler) {
+ addSwitchEditableListener(handler);
+ addAlignmentChangedListener(handler);
+ addRemoveChildListener(handler);
+ addShowPropertiesListener(handler);
+ addSwitchMarginListener(handler);
+ addSwitchSpacingListener(handler);
+ addAddChildListener(handler);
+ }
+
+ /**
+ * Removes the all event hanndler.
+ *
+ * @param handler
+ * the handler
+ */
+ public void removeAllEventHanndler(AllEventHanndler handler) {
+ removeSwitchEditableListener(handler);
+ removeAlignmentChangedListener(handler);
+ removeRemoveChildListener(handler);
+ removeShowPropertiesListener(handler);
+ removeSwitchMarginListener(handler);
+ removeSwitchSpacingListener(handler);
+ removeAddChildListener(handler);
+ }
+
+ /**
+ * Add listener which is being notified if the alignment changes.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addAlignmentChangedListener(AlignmentChangedListener listener) {
+ addListener(AlignmentChangedEvent.class, listener, AlignmentChangedListener.ALIGNMENT_CHANGED_METHOD);
+ }
+
+ /**
+ * Removes listener which is being notified if the alignment changes.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeAlignmentChangedListener(AlignmentChangedListener listener) {
+ removeListener(AlignmentChangedEvent.class, listener);
+ }
+
+ /**
+ * Add listener which is being notified if a child should be removed.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addRemoveChildListener(RemoveChildListener listener) {
+ addListener(RemoveChildEvent.class, listener, RemoveChildListener.REMOVE_CHILD_METHOD);
+ }
+
+ /**
+ * Removes listener which is being notified if a child should be removed.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeRemoveChildListener(RemoveChildListener listener) {
+ removeListener(RemoveChildEvent.class, listener);
+ }
+
+ /**
+ * Add listener which is being notified if a child should be added.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addAddChildListener(AddChildListener listener) {
+ addListener(AddChildEvent.class, listener, AddChildListener.ADD_CHILD_METHOD);
+ }
+
+ /**
+ * Removes listener which is being notified if a child should be added.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeAddChildListener(AddChildListener listener) {
+ removeListener(AddChildEvent.class, listener);
+ }
+
+ /**
+ * Add listener which is being notified if the editable state should be
+ * switched.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addSwitchEditableListener(SwitchEditableListener listener) {
+ addListener(SwitchEditableEvent.class, listener, SwitchEditableListener.SWITCH_EDITABLE_METHOD);
+ }
+
+ /**
+ * Removes listener which is being notified if the editable state should be
+ * switched.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeSwitchEditableListener(SwitchEditableListener listener) {
+ removeListener(SwitchEditableEvent.class, listener);
+ }
+
+ /**
+ * Add listener which is being notified if a properties dialog should be
+ * shown.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addShowPropertiesListener(ShowPropertiesListener listener) {
+ addListener(ShowPropertiesEvent.class, listener, ShowPropertiesListener.SHOW_PROPERTIES_METHOD);
+ }
+
+ /**
+ * Removes listener which is being notified if a properties dialog should be
+ * shown.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeShowPropertiesListener(ShowPropertiesListener listener) {
+ removeListener(ShowPropertiesEvent.class, listener);
+ }
+
+ /**
+ * Add listener which is being notified if the spacing state should be
+ * switched.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addSwitchSpacingListener(SwitchSpacingListener listener) {
+ addListener(SwitchSpacingEvent.class, listener, SwitchSpacingListener.SWITCH_SPACING_METHOD);
+ }
+
+ /**
+ * Remove listener which is being notified if the spacing state should be
+ * switched.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeSwitchSpacingListener(SwitchSpacingListener listener) {
+ removeListener(SwitchSpacingEvent.class, listener);
+ }
+
+ /**
+ * Add listener which is being notified if the margin state should be
+ * switched.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addSwitchMarginListener(SwitchMarginListener listener) {
+ addListener(SwitchMarginEvent.class, listener, SwitchMarginListener.SWITCH_MARGIN_METHOD);
+ }
+
+ /**
+ * Remove listener which is being notified if the margin state should be
+ * switched.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeSwitchMarginListener(SwitchMarginListener listener) {
+ removeListener(SwitchMarginEvent.class, listener);
+ }
+
+ /**
+ * The Class AlignmentChangedEvent.
+ */
+ public static class AlignmentChangedEvent extends Event {
+
+ /** The alignment. */
+ private final AlignmentInfo alignment;
+
+ /**
+ * Instantiates a new alignment changed event.
+ *
+ * @param source
+ * the source
+ * @param alignment
+ * the alignment
+ */
+ public AlignmentChangedEvent(Component source, AlignmentInfo alignment) {
+ super(source);
+ this.alignment = alignment;
+ }
+
+ /**
+ * Gets the alignment.
+ *
+ * @return the alignment
+ */
+ public AlignmentInfo getAlignment() {
+ return alignment;
+ }
+
+ }
+
+ /**
+ * The listener interface for receiving alignmentChanged events. The class
+ * that is interested in processing a alignmentChanged event implements this
+ * interface, and the object created with that class is registered with a
+ * component using the component's <code>addAlignmentChangedListener</code>
+ * method. When the alignmentChanged event occurs, that object's appropriate
+ * method is invoked.
+ *
+ * @see AlignmentChangedEvent
+ */
+ public interface AlignmentChangedListener extends Serializable {
+
+ /** The Constant ALIGNMENT_CHANGED_METHOD. */
+ public static final Method ALIGNMENT_CHANGED_METHOD = ReflectTools.findMethod(AlignmentChangedListener.class,
+ "alignmentChanged", AlignmentChangedEvent.class);
+
+ /**
+ * Alignment changed.
+ *
+ * @param event
+ * the event
+ */
+ void alignmentChanged(AlignmentChangedEvent event);
+
+ }
+
+ /**
+ * This event is fired, if a properties dialog should be shown.
+ */
+ public class ShowPropertiesEvent extends Event {
+
+ /**
+ * Instantiates a new show properties event.
+ *
+ * @param source
+ * the source
+ */
+ public ShowPropertiesEvent(Component source) {
+ super(source);
+ }
+ }
+
+ /**
+ * Listens for ShowPropertiesEvent.
+ *
+ * @see ShowPropertiesEvent
+ */
+ public interface ShowPropertiesListener {
+
+ /** The Constant SHOW_PROPERTIES_METHOD. */
+ public static final Method SHOW_PROPERTIES_METHOD = ReflectTools.findMethod(ShowPropertiesListener.class,
+ "showProperties", ShowPropertiesEvent.class);
+
+ /**
+ * Show properties.
+ *
+ * @param event
+ * the event
+ */
+ void showProperties(ShowPropertiesEvent event);
+
+ }
+
+ /**
+ * The Class RemoveChildEvent.
+ */
+ public static class RemoveChildEvent extends Event {
+
+ /**
+ * Instantiates a new removes the child event.
+ *
+ * @param source
+ * the source
+ */
+ public RemoveChildEvent(Component source) {
+ super(source);
+ }
+ }
+
+ /**
+ * The listener interface for receiving removeChild events. The class that
+ * is interested in processing a removeChild event implements this
+ * interface, and the object created with that class is registered with a
+ * component using the component's <code>addRemoveChildListener</code>
+ * method. When the removeChild event occurs, that object's appropriate
+ * method is invoked.
+ *
+ * @see RemoveChildEvent
+ */
+ public interface RemoveChildListener extends Serializable {
+
+ /** The Constant REMOVE_CHILD_METHOD. */
+ public static final Method REMOVE_CHILD_METHOD = ReflectTools.findMethod(RemoveChildListener.class,
+ "removeChild", RemoveChildEvent.class);
+
+ /**
+ * Removes the child.
+ *
+ * @param event
+ * the event
+ */
+ void removeChild(RemoveChildEvent event);
+ }
+
+ /**
+ * The Class AddChildEvent.
+ */
+ public static class AddChildEvent extends Event {
+
+ /**
+ * Instantiates a new adds the child event.
+ *
+ * @param source
+ * the source
+ */
+ public AddChildEvent(Component source) {
+ super(source);
+ }
+ }
+
+ /**
+ * The listener interface for receiving addChild events. The class that is
+ * interested in processing a addChild event implements this interface, and
+ * the object created with that class is registered with a component using
+ * the component's <code>addAddChildListener</code> method. When the
+ * addChild event occurs, that object's appropriate method is invoked.
+ *
+ * @see AddChildEvent
+ */
+ public interface AddChildListener extends Serializable {
+
+ /** The Constant ADD_CHILD_METHOD. */
+ public static final Method ADD_CHILD_METHOD = ReflectTools.findMethod(AddChildListener.class, "addChild",
+ AddChildEvent.class);
+
+ /**
+ * Adds the child.
+ *
+ * @param event
+ * the event
+ */
+ void addChild(AddChildEvent event);
+ }
+
+ /**
+ * The Class SwitchEditableEvent.
+ */
+ public static class SwitchEditableEvent extends Event {
+
+ /**
+ * Instantiates a new switch editable event.
+ *
+ * @param source
+ * the source
+ */
+ public SwitchEditableEvent(Component source) {
+ super(source);
+ }
+ }
+
+ /**
+ * The listener interface for receiving switchEditable events. The class
+ * that is interested in processing a switchEditable event implements this
+ * interface, and the object created with that class is registered with a
+ * component using the component's <code>addSwitchEditableListener</code>
+ * method. When the switchEditable event occurs, that object's appropriate
+ * method is invoked.
+ *
+ * @see SwitchEditableEvent
+ */
+ public interface SwitchEditableListener extends Serializable {
+
+ /** The Constant SWITCH_EDITABLE_METHOD. */
+ public static final Method SWITCH_EDITABLE_METHOD = ReflectTools.findMethod(SwitchEditableListener.class,
+ "switchEditable", SwitchEditableEvent.class);
+
+ /**
+ * Switch editable.
+ *
+ * @param event
+ * the event
+ */
+ void switchEditable(SwitchEditableEvent event);
+ }
+
+ /**
+ * The Class AllEventHanndler.
+ */
+ public static abstract class AllEventHanndler
+ implements AlignmentChangedListener, RemoveChildListener, SwitchEditableListener, ShowPropertiesListener,
+ SwitchMarginListener, SwitchSpacingListener, AddChildListener {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+ * DesignerOverlayExtension.SwitchEditableListener#switchEditable(org.
+ * eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+ * SwitchEditableEvent)
+ */
+ @Override
+ public void switchEditable(SwitchEditableEvent event) {
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+ * DesignerOverlayExtension.RemoveChildListener#removeChild(org.eclipse.
+ * osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+ * RemoveChildEvent)
+ */
+ @Override
+ public void removeChild(RemoveChildEvent event) {
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+ * DesignerOverlayExtension.AddChildListener#addChild(org.eclipse.osbp.
+ * vaadin.addons.designer.overlay.DesignerOverlayExtension.
+ * AddChildEvent)
+ */
+ @Override
+ public void addChild(AddChildEvent event) {
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+ * DesignerOverlayExtension.AlignmentChangedListener#alignmentChanged(
+ * org.eclipse.osbp.vaadin.addons.designer.overlay.
+ * DesignerOverlayExtension.AlignmentChangedEvent)
+ */
+ @Override
+ public void alignmentChanged(AlignmentChangedEvent event) {
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+ * DesignerOverlayExtension.ShowPropertiesListener#showProperties(org.
+ * eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+ * ShowPropertiesEvent)
+ */
+ @Override
+ public void showProperties(ShowPropertiesEvent event) {
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+ * DesignerOverlayExtension.SwitchSpacingListener#switchSpacing(org.
+ * eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+ * SwitchSpacingEvent)
+ */
+ @Override
+ public void switchSpacing(SwitchSpacingEvent event) {
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+ * DesignerOverlayExtension.SwitchMarginListener#switchMargin(org.
+ * eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+ * SwitchMarginEvent)
+ */
+ @Override
+ public void switchMargin(SwitchMarginEvent event) {
+
+ }
+
+ }
+
+ /**
+ * The Class SwitchMarginEvent.
+ */
+ public static class SwitchMarginEvent extends Event {
+
+ /**
+ * Instantiates a new switch margin event.
+ *
+ * @param source
+ * the source
+ */
+ public SwitchMarginEvent(Component source) {
+ super(source);
+ }
+ }
+
+ /**
+ * The listener interface for receiving switchMargin events. The class that
+ * is interested in processing a switchMargin event implements this
+ * interface, and the object created with that class is registered with a
+ * component using the component's <code>addSwitchMarginListener</code>
+ * method. When the switchMargin event occurs, that object's appropriate
+ * method is invoked.
+ *
+ * @see SwitchMarginEvent
+ */
+ public interface SwitchMarginListener extends Serializable {
+
+ /** The Constant SWITCH_MARGIN_METHOD. */
+ public static final Method SWITCH_MARGIN_METHOD = ReflectTools.findMethod(SwitchMarginListener.class,
+ "switchMargin", SwitchMarginEvent.class);
+
+ /**
+ * Switch margin.
+ *
+ * @param event
+ * the event
+ */
+ void switchMargin(SwitchMarginEvent event);
+ }
+
+ /**
+ * The Class SwitchSpacingEvent.
+ */
+ public static class SwitchSpacingEvent extends Event {
+
+ /**
+ * Instantiates a new switch spacing event.
+ *
+ * @param source
+ * the source
+ */
+ public SwitchSpacingEvent(Component source) {
+ super(source);
+ }
+ }
+
+ /**
+ * The listener interface for receiving switchSpacing events. The class that
+ * is interested in processing a switchSpacing event implements this
+ * interface, and the object created with that class is registered with a
+ * component using the component's <code>addSwitchSpacingListener</code>
+ * method. When the switchSpacing event occurs, that object's appropriate
+ * method is invoked.
+ *
+ * @see SwitchSpacingEvent
+ */
+ public interface SwitchSpacingListener extends Serializable {
+
+ /** The Constant SWITCH_SPACING_METHOD. */
+ public static final Method SWITCH_SPACING_METHOD = ReflectTools.findMethod(SwitchSpacingListener.class,
+ "switchSpacing", SwitchSpacingEvent.class);
+
+ /**
+ * Switch spacing.
+ *
+ * @param event
+ * the event
+ */
+ void switchSpacing(SwitchSpacingEvent event);
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayWidgetset.gwt.xml b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayWidgetset.gwt.xml
new file mode 100644
index 0000000..80e78b1
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayWidgetset.gwt.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
+<module>
+ <inherits name="com.vaadin.DefaultWidgetSet" />
+
+ <!-- Uncomment the following to compile the widgetset for one browser only.
+ Multiple browsers can be specified as a comma separated list. The supported
+ user agents at the moment of writing were: ie8,ie9,gecko1_8,safari,opera
+ The value gecko1_8 is used for Firefox and safari is used for webkit based
+ browsers including Google Chrome. -->
+
+ <!-- To enable SuperDevMode, uncomment this line. See https://vaadin.com/wiki/-/wiki/Main/Using%20SuperDevMode
+ for more information and instructions. -->
+ <!-- <set-configuration-property name="devModeRedirectEnabled" value="true" /> -->
+
+<!-- <add-linker name="xsiframe" /> -->
+<!-- <set-configuration-property name="devModeRedirectEnabled" -->
+<!-- value="true" /> -->
+<!-- <set-property name="user.agent" value="safari" /> -->
+
+ <stylesheet src="designer_overlay/styles.css" />
+</module>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionClientRpc.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionClientRpc.java
new file mode 100644
index 0000000..c51a89a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionClientRpc.java
@@ -0,0 +1,22 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import com.vaadin.shared.communication.ClientRpc;
+
+/**
+ * The Interface DesignerExtensionClientRpc.
+ */
+public interface DesignerExtensionClientRpc extends ClientRpc {
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionConnector.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionConnector.java
new file mode 100644
index 0000000..52a3a96
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionConnector.java
@@ -0,0 +1,232 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OAlignmentChangedEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OAlignmentChangedHandler;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OButtonClickEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OButtonClickHandler;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OOverlayController;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Event.NativePreviewEvent;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.ServerConnector;
+import com.vaadin.client.communication.RpcProxy;
+import com.vaadin.client.communication.StateChangeEvent;
+import com.vaadin.client.extensions.AbstractExtensionConnector;
+import com.vaadin.shared.ui.Connect;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class DesignerExtensionConnector.
+ */
+@Connect(DesignerOverlayExtension.class)
+public class DesignerExtensionConnector extends AbstractExtensionConnector implements OAlignmentChangedHandler,
+ OButtonClickHandler, com.google.gwt.user.client.Event.NativePreviewHandler {
+
+ /** The Constant serialVersionUID. */
+ private static final long serialVersionUID = -3501965859455838012L;
+
+ /** The rpc. */
+ private DesignerExtensionServerRpc rpc = RpcProxy.create(DesignerExtensionServerRpc.class, this);
+
+ /** The hreg. */
+ private HandlerRegistration hreg;
+
+ /** The overlay. */
+ private ODesignerOverlay overlay;
+
+ private Widget widget;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.client.extensions.AbstractExtensionConnector#extend(com.vaadin
+ * .client.ServerConnector)
+ */
+ @Override
+ protected void extend(ServerConnector target) {
+ widget = ((ComponentConnector) target).getWidget();
+
+ overlay = GWT.create(ODesignerOverlay.class);
+ overlay.setConnector(DesignerExtensionConnector.this);
+ overlay.setOwner(widget);
+
+ OOverlayController.getInstance().register(widget.getElement(), overlay);
+
+ hreg = Event.addNativePreviewHandler(this);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.google.gwt.user.client.ui.PopupPanel#onPreviewNativeEvent(com.google.
+ * gwt.user.client.Event.NativePreviewEvent)
+ */
+ public void onPreviewNativeEvent(final NativePreviewEvent event) {
+ Element target = Element.as(event.getNativeEvent().getEventTarget());
+ int type = event.getTypeInt();
+
+ if (type == Event.ONCLICK) {
+ if (!event.getNativeEvent().getAltKey()) {
+ return;
+ }
+ if (event.isCanceled()) {
+ return;
+ }
+ if (!isEventOnTarget(target)) {
+ return;
+ }
+
+ if (!overlay.isShowing()) {
+ int top = widget.getAbsoluteTop() + widget.getOffsetHeight();
+ int windowHeight = RootPanel.get().getOffsetHeight();
+ if (windowHeight - top < 30) {
+ // place the popup above
+ top = widget.getAbsoluteTop();
+ }
+
+ OOverlayController.getInstance().show(overlay, event.getNativeEvent().getClientX(),
+ event.getNativeEvent().getClientY());
+ event.cancel();
+ }
+ overlay.setAlignmentInfo(getState().alignment);
+
+ } else if (type == Event.ONKEYUP) {
+ if (event.isCanceled()) {
+ return;
+ }
+ if (!isEventOnTarget(target)) {
+ return;
+ }
+ int keyCode = event.getNativeEvent().getKeyCode();
+ if (KeyCodes.KEY_UP == keyCode && event.getNativeEvent().getAltKey()) {
+ OOverlayController.getInstance().navigateUp();
+ event.cancel();
+ } else if (KeyCodes.KEY_DOWN == keyCode && event.getNativeEvent().getAltKey()) {
+ OOverlayController.getInstance().navigateDown();
+ event.cancel();
+ } else if (KeyCodes.KEY_ESCAPE == keyCode) {
+ OOverlayController.getInstance().close();
+ event.cancel();
+ }
+ }
+ }
+
+ /**
+ * Checks if is mouse on target.
+ *
+ * @param target
+ * the target
+ * @return true, if is mouse on target
+ */
+ protected boolean isEventOnTarget(Element target) {
+ // is owner the target?
+ boolean eventTargetsThis = widget.getElement().isOrHasChild(target);
+ return eventTargetsThis;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.client.ui.AbstractConnector#getState()
+ */
+ @Override
+ public DesignerExtensionState getState() {
+ return (DesignerExtensionState) super.getState();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.client.ui.AbstractConnector#onStateChanged(com.vaadin.client.
+ * communication.StateChangeEvent)
+ */
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+
+ if (overlay != null) {
+ overlay.setAlignmentInfo(getState().alignment);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.client.ui.AbstractConnector#onUnregister()
+ */
+ @Override
+ public void onUnregister() {
+
+ OOverlayController.getInstance().unregister(widget.getElement());
+
+ hreg.removeHandler();
+ hreg = null;
+
+ if (overlay != null) {
+ overlay.destroy();
+ overlay = null;
+ }
+
+ super.onUnregister();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.
+ * OAlignmentChangedHandler#onAlignmentChanged(org.eclipse.osbp.vaadin.
+ * addons.designer.overlay.client.widgets.OAlignmentChangedEvent)
+ */
+ @Override
+ public void onAlignmentChanged(OAlignmentChangedEvent event) {
+ getState().alignment = event.getAlignment();
+ rpc.alignmentChanged(event.getAlignment());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.
+ * OButtonClickHandler#clicked(org.eclipse.osbp.vaadin.addons.designer.
+ * overlay.client.widgets.OButtonClickEvent)
+ */
+ @Override
+ public void clicked(OButtonClickEvent event) {
+ if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__REMOVE_CHILD)) {
+ rpc.removeChild();
+ } else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__ADD_CHILD)) {
+ rpc.addChild();
+ } else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__SWITCH_EDITABLE)) {
+ rpc.switchEditable();
+ } else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__OPEN_PROPERTIES)) {
+ rpc.openProperties();
+ } else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__SWITCH_MARGIN)) {
+ rpc.switchMargin();
+ } else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__SWITCH_SPACING)) {
+ rpc.switchSpacing();
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionServerRpc.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionServerRpc.java
new file mode 100644
index 0000000..299d917
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionServerRpc.java
@@ -0,0 +1,62 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+
+import com.vaadin.shared.communication.ServerRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface DesignerExtensionServerRpc.
+ */
+public interface DesignerExtensionServerRpc extends ServerRpc {
+
+ /**
+ * Is called to change the alignment of the child.
+ *
+ * @param alignment the alignment
+ */
+ void alignmentChanged(AlignmentInfo alignment);
+
+ /**
+ * Is called to remove the child from its layout.
+ */
+ void removeChild();
+
+ /**
+ * Is called to add a child to its layout.
+ */
+ void addChild();
+
+ /**
+ * Is called to open the properties dialog.
+ */
+ void openProperties();
+
+ /**
+ * Switches the editable state.
+ */
+ void switchEditable();
+
+ /**
+ * Switches the margin state.
+ */
+ void switchMargin();
+
+ /**
+ * Switchs the spacing state.
+ */
+ void switchSpacing();
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionState.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionState.java
new file mode 100644
index 0000000..3510c3f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionState.java
@@ -0,0 +1,58 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+import com.vaadin.shared.communication.SharedState;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class DesignerExtensionState.
+ */
+public class DesignerExtensionState extends SharedState {
+
+ /** The Constant serialVersionUID. */
+ private static final long serialVersionUID = -138381612142479069L;
+
+ /** The alignment. */
+ public AlignmentInfo alignment;
+
+ /** The supports remove. */
+ public boolean supportsRemove = false;
+
+ /** The supports editable. */
+ public boolean supportsEditable = true;
+
+ /** The supports properties dialog. */
+ public boolean supportsPropertiesDialog = true;
+
+ /** The supports margins. */
+ public boolean supportsMargins = false;
+
+ /** The supports spacing. */
+ public boolean supportsSpacing = false;
+
+ /** The supports alignments. */
+ public boolean supportsAlignments = true;
+
+ /** The supports add. */
+ public boolean supportsAdd = false;
+
+ public String descriptionRemove = "remove";
+ public String descriptionEditable = "editable";
+ public String descriptionPropertiesDialog = "properties";
+ public String descriptionMargins = "margins";
+ public String descriptionSpacing = "spacing";
+ public String descriptionAlignments = "alignments";
+ public String descriptionAdd = "add";
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OAbstractOverlay.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OAbstractOverlay.java
new file mode 100644
index 0000000..89133a4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OAbstractOverlay.java
@@ -0,0 +1,79 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import java.util.logging.Logger;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.DOM;
+import com.vaadin.client.ui.VOverlay;
+
+/**
+ * The Class OAbstractOverlay.
+ */
+@SuppressWarnings("deprecation")
+public class OAbstractOverlay extends VOverlay {
+
+ /** The Constant CSS_DESIGNER_OVERLAYED. */
+ private static final String CSS_DESIGNER_OVERLAYED = "o-designer-overlayed";
+
+ private final Logger logger = Logger.getLogger("DesignerOverlay");
+
+ /**
+ * Instantiates a new o abstract overlay.
+ */
+ public OAbstractOverlay() {
+ super(true, false);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.client.ui.VOverlay#show()
+ */
+ @Override
+ public void show() {
+ super.show();
+
+ getOwner().addStyleName(CSS_DESIGNER_OVERLAYED);
+
+ logger.info("Showing overlay for " + getOwner().getElement().getId());
+ logger.info("Added marker css style for " + getOwner().getElement().getId());
+ }
+
+ public void hide(final boolean autoClosed, final boolean animateIn, final boolean animateOut) {
+ super.hide(autoClosed, animateIn, animateOut);
+
+ logger.info("Hiding overlay for " + getOwner().getElement().getId());
+
+ getOwner().removeStyleName(CSS_DESIGNER_OVERLAYED);
+ logger.info("Removed marker css style for " + getOwner().getElement().getId());
+ }
+
+ /**
+ * Checks if is mouse on target.
+ *
+ * @param target
+ * the target
+ * @return true, if is mouse on target
+ */
+ protected boolean isMouseOnTarget(Element target) {
+ // is owner the target?
+ boolean eventTargetsThis = DOM.isOrHasChild(getOwner().getElement(), target);
+ if (!eventTargetsThis) {
+ eventTargetsThis = DOM.isOrHasChild(getElement(), target);
+ }
+ return eventTargetsThis;
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/ODesignerOverlay.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/ODesignerOverlay.java
new file mode 100644
index 0000000..d404d6b
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/ODesignerOverlay.java
@@ -0,0 +1,186 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OAlignmentWidget;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OButtonWidget;
+
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.vaadin.client.ui.VImage;
+import com.vaadin.shared.ComponentConstants;
+
+/**
+ * Overlay for designer stuff.
+ */
+public class ODesignerOverlay extends OAbstractOverlay {
+
+ /** The Constant CLASSNAME. */
+ private static final String CLASSNAME = "o-designer-overlay";
+
+ /** The alignment widget. */
+ private OAlignmentWidget alignmentWidget;
+
+ /** The remove button. */
+ private OButtonWidget removeButton;
+
+ /** The root. */
+ private FlowPanel root;
+
+ /** The editable button. */
+ private OButtonWidget editableButton;
+
+ /** The open properties button. */
+ private OButtonWidget openPropertiesButton;
+
+ /** The margin button. */
+ private OButtonWidget marginButton;
+
+ /** The spacing button. */
+ private OButtonWidget spacingButton;
+
+ /** The add button. */
+ private OButtonWidget addButton;
+
+ /**
+ * Shows alignment lines for drag and resize operations.
+ */
+ public ODesignerOverlay() {
+
+ getElement().setClassName(CLASSNAME);
+ }
+
+ /**
+ * Initialize.
+ *
+ * @param connector the connector
+ */
+ private void initialize(DesignerExtensionConnector connector) {
+ root = new FlowPanel();
+ add(root);
+
+ if (connector.getResourceUrl(ComponentConstants.ICON_RESOURCE) != null) {
+ VImage image = new VImage();
+ root.add(image);
+ String iconUrl = connector.getResourceUrl(ComponentConstants.ICON_RESOURCE);
+ image.setUrl(iconUrl);
+ }
+
+ if (connector.getState().supportsAlignments) {
+ alignmentWidget = new OAlignmentWidget();
+ alignmentWidget.setTitle(connector.getState().descriptionAlignments);
+ root.add(alignmentWidget);
+ alignmentWidget.setAlignmentChangedHandler(connector);
+ }
+
+ if (connector.getState().supportsMargins) {
+ marginButton = new OButtonWidget();
+ marginButton.addStyleName(OIConstants.EVENT_TYPE__SWITCH_MARGIN);
+ marginButton.setCustomEventType(OIConstants.EVENT_TYPE__SWITCH_MARGIN);
+ marginButton.setTitle(connector.getState().descriptionMargins);
+ root.add(marginButton);
+ marginButton.setClickHandler(connector);
+ }
+ if (connector.getState().supportsSpacing) {
+ spacingButton = new OButtonWidget();
+ spacingButton.addStyleName(OIConstants.EVENT_TYPE__SWITCH_SPACING);
+ spacingButton.setCustomEventType(OIConstants.EVENT_TYPE__SWITCH_SPACING);
+ spacingButton.setTitle(connector.getState().descriptionSpacing);
+ root.add(spacingButton);
+ spacingButton.setClickHandler(connector);
+ }
+
+ if (connector.getState().supportsEditable) {
+ editableButton = new OButtonWidget();
+ editableButton.addStyleName(OIConstants.EVENT_TYPE__SWITCH_EDITABLE);
+ editableButton.setCustomEventType(OIConstants.EVENT_TYPE__SWITCH_EDITABLE);
+ editableButton.setTitle(connector.getState().descriptionEditable);
+ root.add(editableButton);
+ editableButton.setClickHandler(connector);
+ }
+
+ if (connector.getState().supportsRemove) {
+ removeButton = new OButtonWidget();
+ removeButton.addStyleName(OIConstants.EVENT_TYPE__REMOVE_CHILD);
+ removeButton.setCustomEventType(OIConstants.EVENT_TYPE__REMOVE_CHILD);
+ removeButton.setTitle(connector.getState().descriptionRemove);
+ root.add(removeButton);
+ removeButton.setClickHandler(connector);
+ }
+
+ if (connector.getState().supportsAdd) {
+ addButton = new OButtonWidget();
+ addButton.addStyleName(OIConstants.EVENT_TYPE__ADD_CHILD);
+ addButton.setCustomEventType(OIConstants.EVENT_TYPE__ADD_CHILD);
+ addButton.setTitle(connector.getState().descriptionAdd);
+ root.add(addButton);
+ addButton.setClickHandler(connector);
+ }
+
+ if (connector.getState().supportsPropertiesDialog) {
+ openPropertiesButton = new OButtonWidget();
+ openPropertiesButton.addStyleName(OIConstants.EVENT_TYPE__OPEN_PROPERTIES);
+ openPropertiesButton.setCustomEventType(OIConstants.EVENT_TYPE__OPEN_PROPERTIES);
+ openPropertiesButton.setTitle(connector.getState().descriptionPropertiesDialog);
+ root.add(openPropertiesButton);
+ openPropertiesButton.setClickHandler(connector);
+ }
+ }
+
+ /**
+ * Sets the connector.
+ *
+ * @param connector the new connector
+ */
+ public void setConnector(DesignerExtensionConnector connector) {
+ initialize(connector);
+ }
+
+ /**
+ * Sets the alignment info.
+ *
+ * @param alignment the new alignment info
+ */
+ public void setAlignmentInfo(AlignmentInfo alignment) {
+ if(alignmentWidget != null) {
+ alignmentWidget.setAlignmentInfo(alignment);
+ }
+ }
+
+ /**
+ * Destroy.
+ */
+ public void destroy() {
+ if (alignmentWidget != null) {
+ alignmentWidget.destroy();
+ }
+ if (editableButton != null) {
+ editableButton.destroy();
+ }
+ if (removeButton != null) {
+ removeButton.destroy();
+ }
+ if (addButton != null) {
+ addButton.destroy();
+ }
+ if (openPropertiesButton != null) {
+ openPropertiesButton.destroy();
+ }
+ if (spacingButton != null) {
+ spacingButton.destroy();
+ }
+ if (marginButton != null) {
+ marginButton.destroy();
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OIConstants.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OIConstants.java
new file mode 100644
index 0000000..be52a95
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OIConstants.java
@@ -0,0 +1,41 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface OIConstants.
+ */
+public interface OIConstants {
+
+ /** The Constant EVENT_TYPE__REMOVE_CHILD. */
+ // layout child properties
+ public static final String EVENT_TYPE__REMOVE_CHILD = "removeChild";
+
+ /** The Constant EVENT_TYPE__ADD_CHILD. */
+ public static final String EVENT_TYPE__ADD_CHILD = "addChild";
+
+ /** The Constant EVENT_TYPE__SWITCH_EDITABLE. */
+ public static final String EVENT_TYPE__SWITCH_EDITABLE = "switchEditable";
+
+ /** The Constant EVENT_TYPE__OPEN_PROPERTIES. */
+ public static final String EVENT_TYPE__OPEN_PROPERTIES = "openProperties";
+
+ /** The Constant EVENT_TYPE__SWITCH_MARGIN. */
+ // layout properties
+ public static final String EVENT_TYPE__SWITCH_MARGIN = "switchMargin";
+
+ /** The Constant EVENT_TYPE__SWITCH_SPACING. */
+ public static final String EVENT_TYPE__SWITCH_SPACING = "switchSpacing";
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/AlignmentInfo.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/AlignmentInfo.java
new file mode 100644
index 0000000..f0ea1da
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/AlignmentInfo.java
@@ -0,0 +1,125 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Alignment enum with FILL literals.
+ */
+public enum AlignmentInfo {
+
+ /** The bottom left. */
+ BOTTOM_LEFT,
+ /** The bottom center. */
+ BOTTOM_CENTER,
+ /** The bottom right. */
+ BOTTOM_RIGHT,
+ /** The bottom fill. */
+ BOTTOM_FILL,
+ /** The middle left. */
+ MIDDLE_LEFT,
+ /** The middle center. */
+ MIDDLE_CENTER,
+ /** The middle right. */
+ MIDDLE_RIGHT,
+ /** The middle fill. */
+ MIDDLE_FILL,
+ /** The top left. */
+ TOP_LEFT,
+ /** The top center. */
+ TOP_CENTER,
+ /** The top right. */
+ TOP_RIGHT,
+ /** The top fill. */
+ TOP_FILL,
+ /** The fill fill. */
+ FILL_FILL,
+ /** The fill left. */
+ FILL_LEFT,
+ /** The fill center. */
+ FILL_CENTER,
+ /** The fill right. */
+ FILL_RIGHT;
+
+ /**
+ * Checks if is top.
+ *
+ * @return true, if is top
+ */
+ public boolean isTop() {
+ return this == TOP_LEFT || this == TOP_CENTER || this == TOP_RIGHT || this == TOP_FILL;
+ }
+
+ /**
+ * Checks if is middle.
+ *
+ * @return true, if is middle
+ */
+ public boolean isMiddle() {
+ return this == MIDDLE_LEFT || this == MIDDLE_CENTER || this == MIDDLE_RIGHT || this == MIDDLE_FILL;
+ }
+
+ /**
+ * Checks if is bottom.
+ *
+ * @return true, if is bottom
+ */
+ public boolean isBottom() {
+ return this == BOTTOM_LEFT || this == BOTTOM_CENTER || this == BOTTOM_RIGHT || this == BOTTOM_FILL;
+ }
+
+ /**
+ * Checks if is left.
+ *
+ * @return true, if is left
+ */
+ public boolean isLeft() {
+ return this == TOP_LEFT || this == MIDDLE_LEFT || this == BOTTOM_LEFT || this == FILL_LEFT;
+ }
+
+ /**
+ * Checks if is center.
+ *
+ * @return true, if is center
+ */
+ public boolean isCenter() {
+ return this == TOP_CENTER || this == MIDDLE_CENTER || this == BOTTOM_CENTER || this == FILL_CENTER;
+ }
+
+ /**
+ * Checks if is right.
+ *
+ * @return true, if is right
+ */
+ public boolean isRight() {
+ return this == TOP_RIGHT || this == MIDDLE_RIGHT || this == BOTTOM_RIGHT || this == FILL_RIGHT;
+ }
+
+ /**
+ * Checks if is horizontal fill.
+ *
+ * @return true, if is horizontal fill
+ */
+ public boolean isHorizontalFill() {
+ return this == TOP_FILL || this == MIDDLE_FILL || this == BOTTOM_FILL || this == FILL_FILL;
+ }
+
+ /**
+ * Checks if is vertical fill.
+ *
+ * @return true, if is vertical fill
+ */
+ public boolean isVerticalFill() {
+ return this == FILL_LEFT || this == FILL_CENTER || this == FILL_RIGHT || this == FILL_FILL;
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedEvent.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedEvent.java
new file mode 100644
index 0000000..607aab7
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedEvent.java
@@ -0,0 +1,73 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OAlignmentChangedEvent.
+ */
+public class OAlignmentChangedEvent extends GwtEvent<OAlignmentChangedHandler> {
+
+ /**
+ * Event type for alignment change events.
+ */
+ private static final Type<OAlignmentChangedHandler> TYPE = new Type<OAlignmentChangedHandler>();
+
+ /** The alignment. */
+ private final AlignmentInfo alignment;
+
+ /**
+ * Instantiates a new o alignment changed event.
+ *
+ * @param alignment the alignment
+ */
+ public OAlignmentChangedEvent(AlignmentInfo alignment) {
+ this.alignment = alignment;
+ }
+
+ /**
+ * Gets the alignment.
+ *
+ * @return the alignment
+ */
+ public AlignmentInfo getAlignment() {
+ return alignment;
+ }
+
+ /**
+ * Gets the type.
+ *
+ * @return the type
+ */
+ public static Type<OAlignmentChangedHandler> getType() {
+ return TYPE;
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType()
+ */
+ @Override
+ public final Type<OAlignmentChangedHandler> getAssociatedType() {
+ return TYPE;
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler)
+ */
+ @Override
+ protected void dispatch(OAlignmentChangedHandler handler) {
+ handler.onAlignmentChanged(this);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedHandler.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedHandler.java
new file mode 100644
index 0000000..2415fb7
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedHandler.java
@@ -0,0 +1,30 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.shared.EventHandler;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Gets informed about the event.
+ */
+public interface OAlignmentChangedHandler extends EventHandler {
+
+ /**
+ * Is called if the alignment changes.
+ *
+ * @param event the event
+ */
+ void onAlignmentChanged(OAlignmentChangedEvent event);
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentWidget.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentWidget.java
new file mode 100644
index 0000000..1cf651f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentWidget.java
@@ -0,0 +1,433 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.EventTarget;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.EventListener;
+import com.google.gwt.user.client.ui.SimplePanel;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A widget which shows alignment of components.
+ */
+public class OAlignmentWidget extends SimplePanel {
+
+ /** The Constant O_SELECTED. */
+ private static final String O_SELECTED = "o-selected";
+
+ /** The Constant CLASSNAME. */
+ private static final String CLASSNAME = "o-alignment-widget";
+
+ /** The alignment div. */
+ // contains the single alignment buttons and also the fill buttons
+ private Element alignmentDiv = DOM.createDiv();
+
+ /** The alignment single div. */
+ // contains the single alignment button without fill buttons
+ private Element alignmentSingleDiv = DOM.createDiv();
+
+ /** The al_top_left_ div. */
+ private Element al_top_left_Div = DOM.createDiv();
+
+ /** The al_top_center_ div. */
+ private Element al_top_center_Div = DOM.createDiv();
+
+ /** The al_top_right_ div. */
+ private Element al_top_right_Div = DOM.createDiv();
+
+ /** The al_middle_left_ div. */
+ private Element al_middle_left_Div = DOM.createDiv();
+
+ /** The al_middle_center_ div. */
+ private Element al_middle_center_Div = DOM.createDiv();
+
+ /** The al_middle_right_ div. */
+ private Element al_middle_right_Div = DOM.createDiv();
+
+ /** The al_bottom_left_ div. */
+ private Element al_bottom_left_Div = DOM.createDiv();
+
+ /** The al_bottom_center_ div. */
+ private Element al_bottom_center_Div = DOM.createDiv();
+
+ /** The al_bottom_right_ div. */
+ private Element al_bottom_right_Div = DOM.createDiv();
+
+ /** The selected single div. */
+ private Element selectedSingleDiv;
+
+ /** The handler. */
+ private OAlignmentChangedHandler handler;
+
+ /** The al_v_fill_ div. */
+ // fill divs
+ private Element al_v_fill_Div = DOM.createDiv();
+
+ /** The al_h_fill_ div. */
+ private Element al_h_fill_Div = DOM.createDiv();
+
+ /**
+ * Instantiates a new o alignment widget.
+ */
+ public OAlignmentWidget() {
+ getElement().setClassName(CLASSNAME);
+ initDOM();
+ }
+
+ /**
+ * Inits the dom.
+ */
+ private void initDOM() {
+ initializeAlignmentDivs();
+ }
+
+ /**
+ * Initialize alignment divs.
+ */
+ private void initializeAlignmentDivs() {
+
+ getElement().appendChild(alignmentDiv);
+
+ alignmentDiv.appendChild(alignmentSingleDiv);
+ alignmentSingleDiv.appendChild(al_top_left_Div);
+ alignmentSingleDiv.appendChild(al_top_center_Div);
+ alignmentSingleDiv.appendChild(al_top_right_Div);
+ alignmentSingleDiv.appendChild(al_middle_left_Div);
+ alignmentSingleDiv.appendChild(al_middle_center_Div);
+ alignmentSingleDiv.appendChild(al_middle_right_Div);
+ alignmentSingleDiv.appendChild(al_bottom_left_Div);
+ alignmentSingleDiv.appendChild(al_bottom_center_Div);
+ alignmentSingleDiv.appendChild(al_bottom_right_Div);
+
+ alignmentDiv.appendChild(al_h_fill_Div);
+ alignmentDiv.appendChild(al_v_fill_Div);
+
+ alignmentDiv.setClassName("alignment");
+ alignmentSingleDiv.setClassName("singles");
+
+ al_top_left_Div.setClassName("topleft");
+ al_top_center_Div.setClassName("topcenter");
+ al_top_right_Div.setClassName("topright");
+ al_middle_left_Div.setClassName("middleleft");
+ al_middle_center_Div.setClassName("middlecenter");
+ al_middle_right_Div.setClassName("middleright");
+ al_bottom_left_Div.setClassName("bottomleft");
+ al_bottom_center_Div.setClassName("bottomcenter");
+ al_bottom_right_Div.setClassName("bottomright");
+
+ al_h_fill_Div.setClassName("hfill");
+ al_v_fill_Div.setClassName("vfill");
+
+ Event.sinkEvents(al_top_left_Div, Event.ONCLICK);
+ Event.sinkEvents(al_top_center_Div, Event.ONCLICK);
+ Event.sinkEvents(al_top_right_Div, Event.ONCLICK);
+ Event.sinkEvents(al_middle_left_Div, Event.ONCLICK);
+ Event.sinkEvents(al_middle_center_Div, Event.ONCLICK);
+ Event.sinkEvents(al_middle_right_Div, Event.ONCLICK);
+ Event.sinkEvents(al_bottom_left_Div, Event.ONCLICK);
+ Event.sinkEvents(al_bottom_center_Div, Event.ONCLICK);
+ Event.sinkEvents(al_bottom_right_Div, Event.ONCLICK);
+
+ Event.sinkEvents(al_h_fill_Div, Event.ONCLICK);
+ Event.sinkEvents(al_v_fill_Div, Event.ONCLICK);
+
+ /*
+ * Listener to get information about clicked divs.
+ */
+ EventListener alignmentEvents = new EventListener() {
+ @Override
+ public void onBrowserEvent(Event event) {
+ EventTarget target = event.getCurrentEventTarget();
+ Element element = Element.as(target);
+
+ if (element == al_h_fill_Div || element == al_v_fill_Div) {
+ if (element.hasClassName(O_SELECTED)) {
+ element.removeClassName(O_SELECTED);
+ } else {
+ element.addClassName(O_SELECTED);
+ }
+ } else {
+ selectedSingleDiv = element;
+ }
+
+ AlignmentInfo newAlignment = calcAlignmentInfoFromSelection();
+ setAlignmentInfo(newAlignment);
+
+ if (handler != null) {
+ handler.onAlignmentChanged(new OAlignmentChangedEvent(newAlignment));
+ }
+ }
+ };
+
+ Event.setEventListener(al_top_left_Div, alignmentEvents);
+ Event.setEventListener(al_top_center_Div, alignmentEvents);
+ Event.setEventListener(al_top_right_Div, alignmentEvents);
+ Event.setEventListener(al_middle_left_Div, alignmentEvents);
+ Event.setEventListener(al_middle_center_Div, alignmentEvents);
+ Event.setEventListener(al_middle_right_Div, alignmentEvents);
+ Event.setEventListener(al_bottom_left_Div, alignmentEvents);
+ Event.setEventListener(al_bottom_center_Div, alignmentEvents);
+ Event.setEventListener(al_bottom_right_Div, alignmentEvents);
+
+ Event.setEventListener(al_h_fill_Div, alignmentEvents);
+ Event.setEventListener(al_v_fill_Div, alignmentEvents);
+
+ setAlignmentInfo(AlignmentInfo.TOP_LEFT);
+ }
+
+ /**
+ * Calculates the {@link AlignmentInfo} for ui selections.
+ *
+ * @return the alignment info
+ */
+ protected AlignmentInfo calcAlignmentInfoFromSelection() {
+ boolean isFillHorizontal = isFillHorizontalSelected();
+ boolean isFillVertical = isFillVerticalSelected();
+
+ if (isFillHorizontal && isFillVertical) {
+ return AlignmentInfo.FILL_FILL;
+ }
+
+ AlignmentInfo singleInfo = getSingleDivAlignment();
+ if (singleInfo == null) {
+ singleInfo = AlignmentInfo.TOP_LEFT;
+ }
+ if (!isFillHorizontal && !isFillVertical) {
+ return singleInfo;
+ }
+
+ if (isFillHorizontal) {
+ if (singleInfo.isTop()) {
+ return AlignmentInfo.TOP_FILL;
+ } else if (singleInfo.isMiddle()) {
+ return AlignmentInfo.MIDDLE_FILL;
+ } else if (singleInfo.isBottom()) {
+ return AlignmentInfo.BOTTOM_FILL;
+ }
+ } else if (isFillVertical) {
+ if (singleInfo.isLeft()) {
+ return AlignmentInfo.FILL_LEFT;
+ } else if (singleInfo.isCenter()) {
+ return AlignmentInfo.FILL_CENTER;
+ } else if (singleInfo.isRight()) {
+ return AlignmentInfo.FILL_RIGHT;
+ }
+ }
+
+ return AlignmentInfo.TOP_FILL;
+ }
+
+ /**
+ * Resets all alignment infos.
+ */
+ private void clearAll() {
+ clearSingleElements();
+ al_h_fill_Div.removeClassName(O_SELECTED);
+ al_v_fill_Div.removeClassName(O_SELECTED);
+ }
+
+ /**
+ * Resets all alignment infos except h_fill and v_fill.
+ */
+ private void clearSingleElements() {
+ al_top_left_Div.removeClassName(O_SELECTED);
+ al_top_center_Div.removeClassName(O_SELECTED);
+ al_top_right_Div.removeClassName(O_SELECTED);
+ al_middle_left_Div.removeClassName(O_SELECTED);
+ al_middle_center_Div.removeClassName(O_SELECTED);
+ al_middle_right_Div.removeClassName(O_SELECTED);
+ al_bottom_left_Div.removeClassName(O_SELECTED);
+ al_bottom_center_Div.removeClassName(O_SELECTED);
+ al_bottom_right_Div.removeClassName(O_SELECTED);
+ }
+
+ /**
+ * Sets the alignment info.
+ *
+ * @param alignmentInfo the new alignment info
+ */
+ public void setAlignmentInfo(AlignmentInfo alignmentInfo) {
+
+ if (alignmentInfo == null) {
+ alignmentInfo = AlignmentInfo.TOP_LEFT;
+ }
+
+ clearAll();
+
+ switch (alignmentInfo) {
+ case BOTTOM_CENTER:
+ al_bottom_center_Div.addClassName(O_SELECTED);
+ break;
+ case BOTTOM_FILL:
+ al_h_fill_Div.addClassName(O_SELECTED);
+ al_bottom_left_Div.addClassName(O_SELECTED);
+ al_bottom_center_Div.addClassName(O_SELECTED);
+ al_bottom_right_Div.addClassName(O_SELECTED);
+ break;
+ case BOTTOM_LEFT:
+ al_bottom_left_Div.addClassName(O_SELECTED);
+ break;
+ case BOTTOM_RIGHT:
+ al_bottom_right_Div.addClassName(O_SELECTED);
+ break;
+ case FILL_CENTER:
+ al_v_fill_Div.addClassName(O_SELECTED);
+ al_top_center_Div.addClassName(O_SELECTED);
+ al_middle_center_Div.addClassName(O_SELECTED);
+ al_bottom_center_Div.addClassName(O_SELECTED);
+ break;
+ case FILL_FILL:
+ al_v_fill_Div.addClassName(O_SELECTED);
+ al_h_fill_Div.addClassName(O_SELECTED);
+ al_top_left_Div.addClassName(O_SELECTED);
+ al_top_center_Div.addClassName(O_SELECTED);
+ al_top_right_Div.addClassName(O_SELECTED);
+ al_middle_left_Div.addClassName(O_SELECTED);
+ al_middle_center_Div.addClassName(O_SELECTED);
+ al_middle_right_Div.addClassName(O_SELECTED);
+ al_bottom_left_Div.addClassName(O_SELECTED);
+ al_bottom_center_Div.addClassName(O_SELECTED);
+ al_bottom_right_Div.addClassName(O_SELECTED);
+ break;
+ case FILL_LEFT:
+ al_v_fill_Div.addClassName(O_SELECTED);
+ al_top_left_Div.addClassName(O_SELECTED);
+ al_middle_left_Div.addClassName(O_SELECTED);
+ al_bottom_left_Div.addClassName(O_SELECTED);
+ break;
+ case FILL_RIGHT:
+ al_v_fill_Div.addClassName(O_SELECTED);
+ al_top_right_Div.addClassName(O_SELECTED);
+ al_middle_right_Div.addClassName(O_SELECTED);
+ al_bottom_right_Div.addClassName(O_SELECTED);
+ break;
+ case MIDDLE_CENTER:
+ al_middle_center_Div.addClassName(O_SELECTED);
+ break;
+ case MIDDLE_FILL:
+ al_h_fill_Div.addClassName(O_SELECTED);
+ al_middle_left_Div.addClassName(O_SELECTED);
+ al_middle_center_Div.addClassName(O_SELECTED);
+ al_middle_right_Div.addClassName(O_SELECTED);
+ break;
+ case MIDDLE_LEFT:
+ al_middle_left_Div.addClassName(O_SELECTED);
+ break;
+ case MIDDLE_RIGHT:
+ al_middle_right_Div.addClassName(O_SELECTED);
+ break;
+ case TOP_CENTER:
+ al_top_center_Div.addClassName(O_SELECTED);
+ break;
+ case TOP_FILL:
+ al_h_fill_Div.addClassName(O_SELECTED);
+ al_top_left_Div.addClassName(O_SELECTED);
+ al_top_center_Div.addClassName(O_SELECTED);
+ al_top_right_Div.addClassName(O_SELECTED);
+ break;
+ case TOP_LEFT:
+ al_top_left_Div.addClassName(O_SELECTED);
+ break;
+ case TOP_RIGHT:
+ al_top_right_Div.addClassName(O_SELECTED);
+ break;
+ }
+ }
+
+ /**
+ * Gets the single div alignment.
+ *
+ * @return the single div alignment
+ */
+ protected AlignmentInfo getSingleDivAlignment() {
+ if (selectedSingleDiv == null) {
+ return null;
+ }
+
+ if (selectedSingleDiv == al_top_left_Div) {
+ return AlignmentInfo.TOP_LEFT;
+ } else if (selectedSingleDiv == al_top_center_Div) {
+ return AlignmentInfo.TOP_CENTER;
+ } else if (selectedSingleDiv == al_top_right_Div) {
+ return AlignmentInfo.TOP_RIGHT;
+ } else if (selectedSingleDiv == al_middle_left_Div) {
+ return AlignmentInfo.MIDDLE_LEFT;
+ } else if (selectedSingleDiv == al_middle_center_Div) {
+ return AlignmentInfo.MIDDLE_CENTER;
+ } else if (selectedSingleDiv == al_middle_right_Div) {
+ return AlignmentInfo.MIDDLE_RIGHT;
+ } else if (selectedSingleDiv == al_bottom_left_Div) {
+ return AlignmentInfo.BOTTOM_LEFT;
+ } else if (selectedSingleDiv == al_bottom_center_Div) {
+ return AlignmentInfo.BOTTOM_CENTER;
+ } else if (selectedSingleDiv == al_bottom_right_Div) {
+ return AlignmentInfo.BOTTOM_RIGHT;
+ }
+ return null;
+ }
+
+ /**
+ * Checks if is fill horizontal selected.
+ *
+ * @return true, if is fill horizontal selected
+ */
+ protected boolean isFillHorizontalSelected() {
+ return al_h_fill_Div.hasClassName(O_SELECTED);
+ }
+
+ /**
+ * Checks if is fill vertical selected.
+ *
+ * @return true, if is fill vertical selected
+ */
+ protected boolean isFillVerticalSelected() {
+ return al_v_fill_Div.hasClassName(O_SELECTED);
+ }
+
+ /**
+ * Gets the alignment changed handler.
+ *
+ * @return the alignment changed handler
+ */
+ public OAlignmentChangedHandler getAlignmentChangedHandler() {
+ return handler;
+ }
+
+ /**
+ * Sets the alignment changed handler.
+ *
+ * @param handler the new alignment changed handler
+ */
+ public void setAlignmentChangedHandler(OAlignmentChangedHandler handler) {
+ this.handler = handler;
+ }
+
+ /**
+ * Destroy.
+ */
+ public void destroy() {
+ Event.setEventListener(al_top_left_Div, null);
+ Event.setEventListener(al_top_center_Div, null);
+ Event.setEventListener(al_top_right_Div, null);
+ Event.setEventListener(al_middle_left_Div, null);
+ Event.setEventListener(al_middle_center_Div, null);
+ Event.setEventListener(al_middle_right_Div, null);
+ Event.setEventListener(al_bottom_left_Div, null);
+ Event.setEventListener(al_bottom_center_Div, null);
+ Event.setEventListener(al_bottom_right_Div, null);
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickEvent.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickEvent.java
new file mode 100644
index 0000000..2bc06a0
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickEvent.java
@@ -0,0 +1,87 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OButtonClickEvent.
+ */
+public class OButtonClickEvent extends GwtEvent<OButtonClickHandler> {
+
+ /**
+ * Event type for resize end events.
+ */
+ private static final Type<OButtonClickHandler> TYPE = new Type<OButtonClickHandler>();
+
+ /** The widget. */
+ private final OButtonWidget widget;
+
+ /** The custom event type. */
+ private final String customEventType;
+
+ /**
+ * Instantiates a new o button click event.
+ *
+ * @param widget the widget
+ * @param customEventType the custom event type
+ */
+ public OButtonClickEvent(OButtonWidget widget, String customEventType) {
+ this.widget = widget;
+ this.customEventType = customEventType;
+ }
+
+ /**
+ * Gets the widget.
+ *
+ * @return the widget
+ */
+ public OButtonWidget getWidget() {
+ return widget;
+ }
+
+ /**
+ * Gets the custom event type.
+ *
+ * @return the custom event type
+ */
+ public String getCustomEventType() {
+ return customEventType;
+ }
+
+ /**
+ * Gets the event type associated with resize end events.
+ *
+ * @return the handler type
+ */
+ public static Type<OButtonClickHandler> getType() {
+ return TYPE;
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType()
+ */
+ @Override
+ public final Type<OButtonClickHandler> getAssociatedType() {
+ return TYPE;
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler)
+ */
+ @Override
+ protected void dispatch(OButtonClickHandler handler) {
+ handler.clicked(this);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickHandler.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickHandler.java
new file mode 100644
index 0000000..2ed584e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickHandler.java
@@ -0,0 +1,30 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.shared.EventHandler;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface OButtonClickHandler.
+ */
+public interface OButtonClickHandler extends EventHandler {
+
+ /**
+ * Clicked.
+ *
+ * @param event the event
+ */
+ void clicked(OButtonClickEvent event);
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonWidget.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonWidget.java
new file mode 100644
index 0000000..c5f5e84
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonWidget.java
@@ -0,0 +1,125 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.ui.Button;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OButtonWidget.
+ */
+public class OButtonWidget extends Button implements ClickHandler {
+
+ /** The Constant CLASSNAME. */
+ private static final String CLASSNAME = "o-button-widget";
+
+ /** The handler. */
+ private OButtonClickHandler handler;
+
+ /** The click pending. */
+ private boolean clickPending;
+
+ /** The custom event type. */
+ private String customEventType;
+
+ /**
+ * Instantiates a new o button widget.
+ */
+ public OButtonWidget() {
+ getElement().setClassName(CLASSNAME);
+ initDOM();
+ }
+
+ /**
+ * Inits the dom.
+ */
+ private void initDOM() {
+ addClickHandler(this);
+ sinkEvents(Event.ONMOUSEDOWN | Event.ONLOAD | Event.ONMOUSEMOVE);
+ }
+
+ /**
+ * Gets the click handler.
+ *
+ * @return the click handler
+ */
+ public OButtonClickHandler getClickHandler() {
+ return handler;
+ }
+
+ /**
+ * Sets the click handler.
+ *
+ * @param handler the new click handler
+ */
+ public void setClickHandler(OButtonClickHandler handler) {
+ this.handler = handler;
+ }
+
+ /**
+ * Gets the custom event type.
+ *
+ * @return the custom event type
+ */
+ public String getCustomEventType() {
+ return customEventType;
+ }
+
+ /**
+ * Sets the custom event type.
+ *
+ * @param customEventType the new custom event type
+ */
+ public void setCustomEventType(String customEventType) {
+ this.customEventType = customEventType;
+ }
+
+ /**
+ * Destroy.
+ */
+ public void destroy() {
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event.dom.client.ClickEvent)
+ */
+ @Override
+ public void onClick(ClickEvent event) {
+ if (clickPending) {
+ handler.clicked(new OButtonClickEvent(this, customEventType));
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.user.client.ui.Widget#onBrowserEvent(com.google.gwt.user.client.Event)
+ */
+ @Override
+ public void onBrowserEvent(Event event) {
+ super.onBrowserEvent(event);
+
+ if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && event.getButton() == Event.BUTTON_LEFT) {
+ clickPending = true;
+ } else if (DOM.eventGetType(event) == Event.ONMOUSEMOVE) {
+ clickPending = false;
+ } else if (DOM.eventGetType(event) == Event.ONMOUSEOUT) {
+ if (clickPending) {
+ click();
+ }
+ clickPending = false;
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OOverlayController.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OOverlayController.java
new file mode 100644
index 0000000..a5a25d1
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OOverlayController.java
@@ -0,0 +1,174 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.OAbstractOverlay;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * Controls, that only one overlay is opened at a time. The delay for closing
+ * the overlay is too long to avoid multiple overlays.
+ */
+public class OOverlayController {
+
+ /** The Constant instance. */
+ private static final OOverlayController instance = new OOverlayController();
+
+ /**
+ * Gets the single instance of OOverlayController.
+ *
+ * @return single instance of OOverlayController
+ */
+ public static OOverlayController getInstance() {
+ return instance;
+ }
+
+ /** The show timer. */
+ // private Timer showTimer;
+
+ /** The current opened. */
+ private OAbstractOverlay currentOpened;
+
+ private Map<Element, OAbstractOverlay> map = new HashMap<>();
+ private Stack<Element> navigationStack = new Stack<>();
+
+ /**
+ * Instantiates a new o overlay controller.
+ */
+ private OOverlayController() {
+
+ }
+
+ /**
+ * Registers the element with the overlay. This is required to use arrow UP
+ * to navigate to the next higher overlay in the element hierarchy.
+ *
+ * @param element
+ * @param overlay
+ */
+ public void register(Element element, OAbstractOverlay overlay) {
+ map.put(element, overlay);
+ }
+
+ /**
+ * Unregisters the element with its overlay.
+ *
+ * @param element
+ */
+ public void unregister(Element element) {
+ map.remove(element);
+ }
+
+ /**
+ * Uses the current opened overlay and navigates up the element hierarchy
+ * until an element associated with an overlay could be found. This overlay
+ * will be shown.
+ */
+ public void navigateUp() {
+ if (currentOpened == null) {
+ navigationStack.clear();
+ return;
+ }
+
+ Element element = currentOpened.getOwner().getElement();
+ OAbstractOverlay nextHigher = findOverlayInParent(element);
+ if (nextHigher != null) {
+ navigationStack.push(element);
+ Widget widget = nextHigher.getOwner();
+ show(nextHigher, widget.getElement().getAbsoluteLeft(), widget.getElement().getAbsoluteTop(), false);
+ }
+ }
+
+ /**
+ * Uses the current opened overlay and navigates down the last opened
+ * overlays.
+ */
+ public void navigateDown() {
+ if (currentOpened == null || navigationStack.isEmpty()) {
+ navigationStack.clear();
+ return;
+ }
+
+ Element lastElement = navigationStack.pop();
+ if (lastElement != null) {
+ show(map.get(lastElement), lastElement.getAbsoluteLeft(), lastElement.getAbsoluteTop(), false);
+ }
+ }
+
+ private OAbstractOverlay findOverlayInParent(Element element) {
+ Element parent = element.getParentElement();
+ if (parent == null) {
+ return null;
+ }
+ if (map.containsKey(parent)) {
+ return map.get(parent);
+ }
+
+ return findOverlayInParent(parent);
+ }
+
+ /**
+ * Notifies the controller, that a new overlay is about to show. The
+ * controller will ensure, that a currently opened overlay will be closed
+ * Immediately.
+ *
+ * @param overlay
+ * the overlay
+ * @param left
+ * the left
+ * @param top
+ * the top
+ */
+ public void show(OAbstractOverlay overlay, int left, int top) {
+ show(overlay, left, top, true);
+ }
+
+ private void show(OAbstractOverlay overlay, int left, int top, boolean clearStack) {
+ if (clearStack) {
+ navigationStack.clear();
+ }
+
+ if (currentOpened == overlay && currentOpened.isShowing()) {
+ return;
+ }
+
+ if (currentOpened != null) {
+ currentOpened.hide();
+ }
+
+ overlay.setPopupPosition(left, top);
+ currentOpened = overlay;
+
+ if (currentOpened != null) {
+ currentOpened.show();
+ }
+ }
+
+ /**
+ * Closes the currently opened overlay.
+ */
+ public void close() {
+ navigationStack.clear();
+ if (currentOpened != null) {
+ currentOpened.hide();
+ currentOpened = null;
+ }
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/add.png b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/add.png
new file mode 100644
index 0000000..64c8a86
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/add.png
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/delete.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/delete.gif
new file mode 100644
index 0000000..2ff6678
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/delete.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/edit_properties.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/edit_properties.gif
new file mode 100644
index 0000000..94eedf6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/edit_properties.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/margin.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/margin.gif
new file mode 100644
index 0000000..9be7aa5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/margin.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/openProperties.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/openProperties.gif
new file mode 100644
index 0000000..1dc19a3
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/openProperties.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/spacing.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/spacing.gif
new file mode 100644
index 0000000..8eb28e6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/spacing.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/styles.css b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/styles.css
new file mode 100644
index 0000000..3c34f1c
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/styles.css
@@ -0,0 +1,193 @@
+.o-designer-overlay .popupContent {
+ height: 32px;
+ width: 100%;
+ display: block;
+ background-color: black;
+ /* border-radius: 3px; */
+ /* border: 2px solid black; */
+ padding: 3px;
+}
+
+.o-designer-overlayed {
+ border-radius: 3px !important;
+ border: 2px solid blue !important;
+}
+
+.o-designer-overlay .o-alignment-widget {
+ position: relative;
+ width: 32px;
+ height: 32px;
+ background-color: #efeef1;
+ float: left;
+ margin-left: 3px;
+}
+
+.o-alignment-widget .alignment {
+ top: 0px;
+ left: 0px;
+ display: block;
+ border: 1px solid white;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ height: 32px;
+ width: 32px;
+ position: absolute;
+ z-index: 10;
+}
+
+.o-alignment-widget .alignment .singles {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ bottom: 0px;
+ height: 22px;
+ width: 22px;
+ overflow: hidden;
+}
+
+.o-alignment-widget .singles .topleft, .o-alignment-widget .singles .topcenter,
+ .o-alignment-widget .singles .topright, .o-alignment-widget .singles .middleleft,
+ .o-alignment-widget .singles .middlecenter, .o-alignment-widget .singles .middleright,
+ .o-alignment-widget .singles .bottomleft, .o-alignment-widget .singles .bottomcenter,
+ .o-alignment-widget .singles .bottomright {
+ background-color: #a2a3a5;
+ height: 6px;
+ width: 6px;
+ display: block;
+ overflow: visible;
+ position: absolute;
+ z-index: 30;
+}
+
+.o-alignment-widget .singles .o-selected {
+ background-color: black;
+}
+
+.o-alignment-widget .singles .topleft {
+ top: 0px;
+ left: 0px;
+}
+
+.o-alignment-widget .singles .topcenter {
+ top: 0px;
+ left: 0px;
+ margin-left: 8px;
+}
+
+.o-alignment-widget .singles .topright {
+ top: 0px;
+ right: 0px;
+}
+
+.o-alignment-widget .singles .middleleft {
+ top: 0px;
+ left: 0px;
+ margin-top: 8px;
+}
+
+.o-alignment-widget .singles .middlecenter {
+ top: 0px;
+ margin-top: 8px;
+ left: 0px;
+ margin-left: 8px;
+}
+
+.o-alignment-widget .singles .middleright {
+ top: 0px;
+ margin-top: 8px;
+ right: 0px;
+}
+
+.o-alignment-widget .singles .bottomleft {
+ bottom: 0px;
+ left: 0px;
+}
+
+.o-alignment-widget .singles .bottomcenter {
+ bottom: 0px;
+ margin-left: 8px;
+ left: 0px;
+}
+
+.o-alignment-widget .singles .bottomright {
+ bottom: 0px;
+ right: 0px;
+}
+
+.o-alignment-widget .alignment .hfill {
+ position: absolute;
+ bottom: 0px;
+ left: 0px;
+ width: 22px;
+ height: 6px;
+ background-color: #a2a3a5;
+}
+
+.o-alignment-widget .alignment .vfill {
+ position: absolute;
+ top: 0px;
+ left: 24px;
+ width: 6px;
+ height: 22px;
+ background-color: #a2a3a5;
+}
+
+.o-alignment-widget .alignment .vfill .o-selected, .o-alignment-widget .alignment .hfill .o-selected
+ {
+ background-color: white !important;
+}
+
+.o-designer-overlay .o-button-widget {
+ position: relative;
+ overflow: hidden;
+ background-color: #efeef1;
+ background-repeat: no-repeat;
+ background-position: center;
+ border-radius: 2px;
+ border: 0px;
+ width: 20px;
+ height: 20px;
+ float: left;
+ margin-left: 3px;
+ margin-top: 6px;
+}
+
+.o-designer-overlay .v-image {
+ position: relative;
+ overflow: hidden;
+ background-color: #efeef1;
+
+ border-style: solid;
+ border-color: silver;
+ border-width: 4px;
+ width: 30px;
+ height: 30px;
+ float: left;
+ margin-left: -3px;
+ margin-top: -3px;
+ margin-right: 8px;
+}
+
+.o-designer-overlay .switchEditable {
+ background-image: url("edit_properties.gif");
+}
+
+.o-designer-overlay .removeChild {
+ background-image: url("delete.gif");
+}
+
+.o-designer-overlay .addChild {
+ background-image: url("add.png");
+}
+
+.o-designer-overlay .openProperties {
+ background-image: url("openProperties.gif");
+}
+
+.o-designer-overlay .switchMargin {
+ background-image: url("margin.gif");
+}
+
+.o-designer-overlay .switchSpacing {
+ background-image: url("spacing.gif");
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/test/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplicationTest.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/test/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplicationTest.java
new file mode 100644
index 0000000..6151586
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/test/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplicationTest.java
@@ -0,0 +1,96 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay;
+
+import com.vaadin.testbench.ScreenshotOnFailureRule;
+import com.vaadin.testbench.TestBenchTestCase;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.LabelElement;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import java.util.List;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * This class contains JUnit tests, which are run using Vaadin TestBench 4.
+ *
+ * To run this, first get an evaluation license from
+ * https://vaadin.com/addon/vaadin-testbench and follow the instructions at
+ * https://vaadin.com/directory/help/installing-cval-license to install it.
+ *
+ * Once the license is installed, you can run this class as a JUnit test.
+ */
+public class OverlayApplicationTest extends TestBenchTestCase {
+ @Rule
+ public ScreenshotOnFailureRule screenshotOnFailureRule =
+ new ScreenshotOnFailureRule(this, true);
+
+ @Before
+ public void setUp() throws Exception {
+ setDriver(new FirefoxDriver()); // Firefox
+
+ // To use Chrome, first install chromedriver.exe from
+ // http://chromedriver.storage.googleapis.com/index.html
+ // on your system path (e.g. C:\Windows\System32\)
+ // setDriver(new ChromeDriver()); // Chrome
+
+ // To use Internet Explorer, first install iedriverserver.exe from
+ // http://selenium-release.storage.googleapis.com/index.html?path=2.43/
+ // on your system path (e.g. C:\Windows\System32\)
+ // setDriver(new InternetExplorerDriver()); // IE
+
+ // To test headlessly (without a browser), first install phantomjs.exe
+ // from http://phantomjs.org/download.html on your system path
+ // (e.g. C:\Windows\System32\)
+ // setDriver(new PhantomJSDriver()); // PhantomJS headless browser
+ }
+
+ /**
+ * Opens the URL where the application is deployed.
+ */
+ private void openTestUrl() {
+ getDriver().get("http://localhost:8080/org.eclipse.osbp.vaadin.addons.designer.overlay");
+ }
+
+ @Test
+ public void testClickButton() throws Exception {
+ openTestUrl();
+
+ // At first there should be no labels
+ assertFalse($(LabelElement.class).exists());
+
+ // Click the button
+ ButtonElement clickMeButton = $(ButtonElement.class).
+ caption("Click Me").first();
+ clickMeButton.click();
+
+ // There should now be one label
+ assertEquals(1, $(LabelElement.class).all().size());
+ // ... with the specified text
+ assertEquals("Thank you for clicking",
+ $(LabelElement.class).first().getText());
+
+ // Click the button again
+ clickMeButton.click();
+
+ // There should now be two labels
+ List<LabelElement> allLabels = $(LabelElement.class).all();
+ assertEquals(2, allLabels.size());
+ // ... and the last label should have the correct text
+ LabelElement lastLabel = allLabels.get(1);
+ assertEquals("Thank you for clicking", lastLabel.getText());
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.feature/.project b/org.eclipse.osbp.vaadin.addons.feature/.project
new file mode 100644
index 0000000..22b88ac
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaadin.addons.feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.addons.feature/LICENSE.txt b/org.eclipse.osbp.vaadin.addons.feature/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.feature/build.properties b/org.eclipse.osbp.vaadin.addons.feature/build.properties
new file mode 100644
index 0000000..2c61631
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/build.properties
@@ -0,0 +1,3 @@
+bin.includes = LICENSE.txt, \
+ feature.xml,\
+ feature.properties
diff --git a/org.eclipse.osbp.vaadin.addons.feature/feature.properties b/org.eclipse.osbp.vaadin.addons.feature/feature.properties
new file mode 100644
index 0000000..40efed4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/feature.properties
@@ -0,0 +1,168 @@
+##############################################################################
+# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation
+##############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName =OSBP Addons for Vaadin
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse OSBP
+
+# "description" property - description of the feature
+description=This feature provides the Vaadin addon bundles used by OSBP.
+
+# "updateSiteName" property - label for the update site
+updateSiteName=
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011-2016 Loetz GmbH&Co.KG \n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+################ end of copyright property ####################################
+
+
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+ - Content may be structured and packaged into modules to facilitate delivering,\n\
+ extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+ plug-in fragments ("Fragments"), and features ("Features").\n\
+ - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+ in a directory named "plugins".\n\
+ - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+ Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+ Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+ numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+ - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+ named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Inside Plug-ins and Fragments packaged as JARs\n\
+ - Sub-directories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+ 1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+ the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+ extending or updating the functionality of an Eclipse-based product.\n\
+ 2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+ Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+ 3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+ govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+ Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+ with the Specification. Such Installable Software Agreement must inform the user of the\n\
+ terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+ the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+ indication of agreement by the user, the provisioning Technology will complete installation\n\
+ of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/org.eclipse.osbp.vaadin.addons.feature/feature.xml b/org.eclipse.osbp.vaadin.addons.feature/feature.xml
new file mode 100644
index 0000000..853d580
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/feature.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation
+-->
+<feature
+ id="org.eclipse.osbp.vaadin.addons.feature"
+ label="%featureName"
+ version="0.9.0.qualifier"
+ provider-name="%providerName">
+
+ <description>
+ %description
+ </description>
+
+ <copyright>
+ %copyright
+ </copyright>
+
+ <license url="%licenseURL">
+ %license
+ </license>
+
+ <plugin
+ id="org.eclipse.osbp.vaadin.addons.absolutelayout"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osbp.vaadin.addons.designer.overlay"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osbp.vaadin.addons.suggesttext"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.osbp.vaadin.addons.feature/pom.xml b/org.eclipse.osbp.vaadin.addons.feature/pom.xml
new file mode 100644
index 0000000..b4005dd
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.osbp.vaadin.addons</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.addons.aggregator</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osbp.vaadin.addons.feature</artifactId>
+ <packaging>eclipse-feature</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.osbp.vaadin.addons</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.addons.absolutelayout</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.osbp.vaadin.addons</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.addons.designer.overlay</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.osbp.vaadin.addons</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.addons.suggesttext</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <!-- workaround while bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=398250
+ is not fixed -->
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <executions>
+ <execution>
+ <id>attached-p2-metadata</id>
+ <phase>package</phase>
+ <goals>
+ <goal>p2-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+<!-- <executions> -->
+<!-- <execution> -->
+<!-- <id>javadoc-jar</id> -->
+<!-- <phase>package</phase> -->
+<!-- <goals> -->
+<!-- <goal>jar</goal> -->
+<!-- </goals> -->
+<!-- </execution> -->
+<!-- </executions> -->
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.addons.feature/src/main/javadoc/README.txt b/org.eclipse.osbp.vaadin.addons.feature/src/main/javadoc/README.txt
new file mode 100644
index 0000000..831da7e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/src/main/javadoc/README.txt
@@ -0,0 +1 @@
+Resource folder for javadoc resources.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.feature/src/overview.html b/org.eclipse.osbp.vaadin.addons.feature/src/overview.html
new file mode 100644
index 0000000..f4a68d1
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/src/overview.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <title>OSBP Technologystack Target Platform Feature Overview</title>
+</head>
+<body>
+<p>The <b>OSBP Vaadin Addons </b>collects all Vaadin Addons provided by OSBP.</p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/.project b/org.eclipse.osbp.vaadin.addons.suggesttext/.project
new file mode 100644
index 0000000..0b595d2
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/.project
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaadin.addons.suggesttext</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.vaadin.integration.eclipse.widgetsetBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.babel.editor.rbeBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ <nature>com.vaadin.integration.eclipse.widgetsetNature</nature>
+ <nature>org.apache.ivyde.eclipse.ivynature</nature>
+ <nature>org.eclipse.babel.editor.rbeNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/LICENSE.txt b/org.eclipse.osbp.vaadin.addons.suggesttext/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ff4015e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/MANIFEST.MF
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Bnd-LastModified: 1491902111724
+Build-Jdk: 1.8.0_91
+Built-By: mollik
+Bundle-ActivationPolicy: lazy
+Bundle-Description: A parent POM aimed to set up the build of general Ma
+ ven based projects.
+Bundle-DocURL: http://www.eclipse.org/osbp
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaadin.addons.suggesttext
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-SymbolicName: org.eclipse.osbp.vaadin.addons.suggesttext
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Created-By: Apache Maven Bundle Plugin
+Export-Package: org.eclipse.osbp.vaadin.addons.customcombo;version="0.9.
+ 0",org.eclipse.osbp.vaadin.addons.suggesttext;version="0.9.0",org.eclip
+ se.osbp.vaadin.addons.suggesttext.client;version="0.9.0",org.eclipse.os
+ bp.vaadin.addons.suggesttext.public.suggesttext;version="0.9.0",org.ecl
+ ipse.osbp.vaadin.addons.suggesttext.sample;version="0.9.0"
+Import-Package: com.vaadin.annotations;version="[7.7,8)",com.vaadin.clie
+ nt;version="[7.7,8)",com.vaadin.client.communication;version="[7.7,8)",
+ com.vaadin.data;version="[7.7,8)",com.vaadin.external.org.slf4j;version
+ ="[1.6,2)",com.vaadin.server;version="[7.7,8)",com.vaadin.ui;version="[
+ 7.7,8)",javax.servlet.annotation;resolution:=optional;version="[3.0,4)"
+ ,org.eclipse.osbp.vaadin.addons.suggesttext.client;version="[0.9,1)",or
+ g.junit
+Require-Bundle: com.vaadin.server;bundle-version="[7.5.7,7.7.0)",com.vaa
+ din.client;bundle-version="[7.5.7,7.7.0)",com.vaadin.shared;bundle-vers
+ ion="[7.5.7,7.7.0)",org.jsoup;bundle-version="[1.8.3,1.8.4)"
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
+Tool: Bnd-3.2.0.201605172007
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/git.properties b/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/git.properties
new file mode 100644
index 0000000..c99b885
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/git.properties
@@ -0,0 +1,14 @@
+#Generated by Git-Commit-Id-Plugin
+#Tue Apr 11 11:17:34 CEST 2017
+git.remote.origin.url=ssh\://compex@10.1.13.14/osbpgit/org.eclipse.osbp.vaadin.addons.git
+git.closest.tag.name=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
+git.commit.id.describe-short=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.time=02.02.2017 @ 18\:04\:55 MEZ
+git.commit.message.full=remove the feature from build
+git.commit.message.short=remove the feature from build
+git.commit.id.abbrev=90dd482
+git.branch=OSBP-initial-commit-2-Eclipse-4-luna
+git.closest.tag.commit.count=0
+git.commit.id.describe=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.id=90dd482e5bc78cd1a404d12445cebc868ee417b0
+git.tags=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/Person.java b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/Person.java
new file mode 100644
index 0000000..010f373
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/Person.java
@@ -0,0 +1,55 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.sample;
+
+import java.util.UUID;
+
+public class Person {
+
+ private String uuid = UUID.randomUUID().toString();
+
+ private String firstname;
+
+ private String lastname;
+
+ public Person(String firstname, String lastname) {
+ super();
+ this.firstname = firstname;
+ this.lastname = lastname;
+ }
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/PersonForUUIDMapping.java b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/PersonForUUIDMapping.java
new file mode 100644
index 0000000..3bfe66c
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/PersonForUUIDMapping.java
@@ -0,0 +1,55 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.sample;
+
+import java.util.Date;
+
+public class PersonForUUIDMapping {
+
+ private long uuid = new Date().getTime();
+
+ private String firstname;
+
+ private String lastname;
+
+ public PersonForUUIDMapping(String firstname, String lastname) {
+ super();
+ this.firstname = firstname;
+ this.lastname = lastname;
+ }
+
+ public long getUuid() {
+ return uuid;
+ }
+
+ public void setUuid(long uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/SuggestTextUI.java b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/SuggestTextUI.java
new file mode 100644
index 0000000..bcdc820
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/SuggestTextUI.java
@@ -0,0 +1,259 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.sample;
+
+import javax.servlet.annotation.WebServlet;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.SuggestTextField;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Slider;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+@Theme("valo")
+public class SuggestTextUI extends UI {
+
+ @WebServlet(value = "/*", asyncSupported = true)
+ @VaadinServletConfiguration(productionMode = false, ui = SuggestTextUI.class, widgetset = "org.eclipse.osbp.vaadin.addons.suggesttext.SuggestTextWidgetset")
+ public static class Servlet extends VaadinServlet {
+ }
+
+ private GridLayout touchLayout;
+
+ @Override
+ protected void init(VaadinRequest request) {
+
+ final HorizontalLayout mainLayout = new HorizontalLayout();
+ setContent(mainLayout);
+
+ addForPerson(mainLayout);
+ addForPersonForUUIDMapping(mainLayout);
+ }
+
+ private void addForPerson(final HorizontalLayout mainLayout) {
+ final VerticalLayout layout = new VerticalLayout();
+ layout.setMargin(true);
+ mainLayout.addComponent(layout);
+
+ // create SuggestTextField
+ final SuggestTextField suggestionBox = new SuggestTextField();
+ suggestionBox.setId("suggestField1");
+ suggestionBox.getTextField().setId("suggestField1_textField");
+
+ // setup text field
+ final Slider popupdelay = new Slider("Popup delay");
+ popupdelay.setId("delay1");
+ popupdelay.setMin(10);
+ popupdelay.setMax(1000);
+ popupdelay.setValue(500d);
+ popupdelay.setResolution(0);
+ layout.addComponent(popupdelay);
+
+ popupdelay.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ suggestionBox.setPopupDelay(popupdelay.getValue().intValue());
+ }
+ });
+
+ // setup text field
+ final Slider limit = new Slider("Suggestion Limit");
+ limit.setId("limit1");
+ limit.setMin(2);
+ limit.setMax(30);
+ limit.setValue(10d);
+ limit.setResolution(0);
+ layout.addComponent(limit);
+
+ limit.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ suggestionBox.setLimit(limit.getValue().intValue());
+ }
+ });
+
+ final CheckBox suggestionEnabled = new CheckBox("suggestion enabled");
+ suggestionEnabled.setId("suggestionEnabled1");
+ suggestionEnabled.setValue(true);
+ layout.addComponent(suggestionEnabled);
+ suggestionEnabled.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ suggestionBox.setSuggestionEnabled(suggestionEnabled.getValue());
+ }
+ });
+
+ final CheckBox autoHide = new CheckBox("auto hide popup");
+ autoHide.setId("autoHide1");
+ autoHide.setValue(true);
+ layout.addComponent(autoHide);
+ autoHide.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ suggestionBox.setAutoHide(autoHide.getValue());
+
+ touchLayout.setEnabled(!autoHide.getValue());
+ }
+ });
+
+ touchLayout = new GridLayout(2, 2);
+ touchLayout.setEnabled(false);
+ touchLayout.setDescription("Set auto hide popup to false");
+ layout.addComponent(touchLayout);
+
+ Button openSuggestList = new Button("open list", e -> {
+ suggestionBox.openPopup();
+ });
+ openSuggestList.setWidth("100%");
+ touchLayout.addComponent(openSuggestList);
+
+ Button closeSuggestList = new Button("close list", e -> {
+ suggestionBox.closePopup();
+ });
+ closeSuggestList.setWidth("100%");
+ touchLayout.addComponent(closeSuggestList);
+
+ Button navUpSuggestList = new Button("nav up", e -> {
+ suggestionBox.navigateToPrevious();
+ });
+ navUpSuggestList.setWidth("100%");
+ touchLayout.addComponent(navUpSuggestList);
+
+ Button navDownSuggestList = new Button("nav down", e -> {
+ suggestionBox.navigateToNext();
+ });
+ navDownSuggestList.setWidth("100%");
+ touchLayout.addComponent(navDownSuggestList);
+
+ Button selectCurrent = new Button("select", e -> {
+ suggestionBox.selectCurrent();
+ });
+ selectCurrent.setWidth("100%");
+ touchLayout.addComponent(selectCurrent);
+
+ // configure and add suggestion box
+ suggestionBox.setCaption("Select");
+ suggestionBox.getTextField().addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ System.out.println("Foo");
+ }
+ });
+ suggestionBox.setSuggestionEnabled(true);
+ suggestionBox.setLimit(10);
+ suggestionBox.setPopupDelay(500);
+ suggestionBox.addStyleName("os-cash");
+ layout.addComponent(suggestionBox);
+ BeanItemContainer<Person> container = new BeanItemContainer<>(Person.class);
+
+ for (int i = 0; i < 100; i++) {
+ container.addBean(new Person("Florian" + i, "Pirchner" + i));
+ container.addBean(new Person("Klemens" + i, "Edler" + i));
+ container.addBean(new Person("Berni" + i, "Edler" + i));
+ }
+ container.addBean(new Person("Sabrina", "Hopf"));
+
+ suggestionBox.setContainerDataSource(container);
+ suggestionBox.setCaptionPropertyId("lastname");
+ suggestionBox.setFilterPropertyId("lastname");
+ suggestionBox.setUniqueIdPropertyId("uuid");
+
+ }
+
+ private void addForPersonForUUIDMapping(final HorizontalLayout mainLayout) {
+ final VerticalLayout layout = new VerticalLayout();
+ layout.setMargin(true);
+ mainLayout.addComponent(layout);
+
+ // create SuggestTextField
+ final SuggestTextField suggestionBox = new SuggestTextField();
+
+ // setup text field
+ final Slider popupdelay = new Slider("Popup delay");
+ popupdelay.setMin(10);
+ popupdelay.setMax(1000);
+ popupdelay.setValue(500d);
+ popupdelay.setResolution(0);
+ layout.addComponent(popupdelay);
+
+ popupdelay.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ suggestionBox.setPopupDelay(popupdelay.getValue().intValue());
+ }
+ });
+
+ // setup text field
+ final Slider limit = new Slider("Suggestion Limit");
+ limit.setMin(2);
+ limit.setMax(30);
+ limit.setValue(10d);
+ limit.setResolution(0);
+ layout.addComponent(limit);
+
+ limit.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ suggestionBox.setLimit(limit.getValue().intValue());
+ }
+ });
+
+ final CheckBox suggestionEnabled = new CheckBox("suggestion enabled");
+ suggestionEnabled.setValue(true);
+ layout.addComponent(suggestionEnabled);
+ suggestionEnabled.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ suggestionBox.setSuggestionEnabled(suggestionEnabled.getValue());
+ }
+ });
+
+ // configure and add SuggestTextField
+ suggestionBox.setCaption("Select with uuid mapping");
+ suggestionBox.getTextField().addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ System.out.println("Foo");
+ }
+ });
+ suggestionBox.setSuggestionEnabled(true);
+ suggestionBox.setLimit(10);
+ suggestionBox.setPopupDelay(500);
+ layout.addComponent(suggestionBox);
+ BeanItemContainer<PersonForUUIDMapping> container = new BeanItemContainer<>(PersonForUUIDMapping.class);
+
+ for (int i = 0; i < 100; i++) {
+ container.addBean(new PersonForUUIDMapping("Florian" + i, "Pirchner" + i));
+ container.addBean(new PersonForUUIDMapping("Klemens" + i, "Edler" + i));
+ container.addBean(new PersonForUUIDMapping("Berni" + i, "Edler" + i));
+ }
+ container.addBean(new PersonForUUIDMapping("Sabrina", "Hopf"));
+
+ suggestionBox.setContainerDataSource(container);
+ suggestionBox.setCaptionPropertyId("lastname");
+ suggestionBox.setFilterPropertyId("lastname");
+ suggestionBox.setUniqueIdPropertyId("uuid");
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.suggesttext.launch b/org.eclipse.osbp.vaadin.addons.suggesttext/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.suggesttext.launch
new file mode 100644
index 0000000..802e6c0
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.suggesttext.launch
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.osbp.vaadin.addons.suggesttext"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="org.eclipse.osbp.vaadin.addons.suggesttext"/> </runtimeClasspathEntry> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.vaadin.addons.suggesttext/src" path="3" type="2"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.vaadin.addons.suggesttext/Sample" path="3" type="2"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.vaadin.addons.suggesttext/test" path="3" type="2"/> "/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.codeserver.CodeServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="org.eclipse.osbp.vaadin.addons.suggesttext.SuggestTextWidgetset"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osbp.vaadin.addons.suggesttext"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xss8M -Xmx512M -XX:MaxPermSize=512M"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="/Users/florianpirchner/git/org.osbee.vaadin.addons/org.eclipse.osbp.vaadin.addons.suggestbox"/>
+</launchConfiguration>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/build.properties b/org.eclipse.osbp.vaadin.addons.suggesttext/build.properties
new file mode 100644
index 0000000..a172fdb
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/build.properties
@@ -0,0 +1,5 @@
+output.. = target/classes/
+bin.includes = META-INF/,\
+ .,\
+ build.properties
+source.. = src/
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/epl-v10.html b/org.eclipse.osbp.vaadin.addons.suggesttext/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml b/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml
new file mode 100644
index 0000000..070ca06
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE ivy-module [
+ <!ENTITY vaadin.version "7.6.5">
+]>
+<ivy-module version="2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+ <info organisation="com.example" module="v7proj" />
+ <configurations>
+ <!-- The default configuration, which should be deployed to the server -->
+ <conf name="default" />
+ <!-- A configuration only needed when compiling the widget set. Should
+ not be deployed to the server -->
+ <conf name="widgetset-compile" />
+ <!-- A configuration used in compilation of server side classes only.
+ Should be deployed to the server -->
+ <conf name="nodeploy" />
+ </configurations>
+ <dependencies defaultconf="default" defaultconfmapping="default->default">
+ <!-- The core server part of Vaadin -->
+ <dependency org="com.vaadin" name="vaadin-server" rev="&vaadin.version;" />
+
+ <!-- Vaadin themes -->
+ <dependency org="com.vaadin" name="vaadin-themes" rev="&vaadin.version;" />
+
+ <!-- Push support -->
+ <dependency org="com.vaadin" name="vaadin-push" rev="&vaadin.version;" />
+
+ <!-- Servlet 3.0 API -->
+ <dependency org="javax.servlet" name="javax.servlet-api" rev="3.0.1" conf="nodeploy->default" />
+
+ <!-- TestBench 4 -->
+ <dependency org="com.vaadin" name="vaadin-testbench-api" rev="latest.release" conf="nodeploy -> default" />
+
+ <!-- Precompiled DefaultWidgetSet -->
+ <dependency org="com.vaadin" name="vaadin-client-compiled"
+ rev="&vaadin.version;" />
+
+ <!-- Vaadin client side, needed for widget set compilation -->
+ <dependency org="com.vaadin" name="vaadin-client" rev="&vaadin.version;"
+ conf="widgetset-compile->default" />
+
+ <!-- Compiler for custom widget sets. Should not be deployed -->
+ <dependency org="com.vaadin" name="vaadin-client-compiler"
+ rev="&vaadin.version;" conf="widgetset-compile->default" />
+ </dependencies>
+</ivy-module>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/ivysettings.xml b/org.eclipse.osbp.vaadin.addons.suggesttext/ivysettings.xml
new file mode 100644
index 0000000..9c0f653
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/ivysettings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivysettings>
+ <settings defaultResolver="default" />
+ <resolvers>
+ <chain name="default">
+ <!-- Public Maven repository -->
+ <ibiblio name="public" m2compatible="true" />
+
+ <!-- Vaadin Add-on repository -->
+ <ibiblio name="vaadin-addons" usepoms="true" m2compatible="true"
+ root="http://maven.vaadin.com/vaadin-addons" />
+
+ <!-- Vaadin snapshots repository -->
+ <ibiblio name="vaadin-snapshots" usepoms="true" m2compatible="true"
+ root="https://oss.sonatype.org/content/repositories/vaadin-snapshots" />
+ <!-- Repository used for Vaadin modified smartsprites library -->
+ <dual name="custom-smartsprites">
+ <filesystem name="smartsprites-ivy">
+ <ivy pattern="${basedir}/ivymodule/[module]-ivy-[revision].xml" />
+ </filesystem>
+ <url name="smartsprites-artifact">
+ <artifact
+ pattern="http://dev.vaadin.com/svn/versions/6.8/build/smartsprites/lib/[artifact](-[revision]).[ext]" />
+ </url>
+ </dual>
+ </chain>
+ </resolvers>
+ <modules>
+ <!-- Vaadin patched SmartSprites -->
+ <module organisation="com.carrotsearch" name="smartsprites"
+ revision="0.2.3-itmill" resolver="custom-smartsprites" />
+ </modules>
+
+
+</ivysettings>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/license.html b/org.eclipse.osbp.vaadin.addons.suggesttext/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse Foundation
+source code
+ repository ("Repository") in software modules ("Modules") and made
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+Fragments and associated material. Each Feature may be packaged as a
+sub-directory in a directory named "features". Within a Feature, files
+named "feature.xml" may contain a list of the names and version numbers
+of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+Features"). Within a Feature, files named "feature.xml" may contain a
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+ SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software,
+examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of
+allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning
+Technology
+ in accordance with the Specification. By using Provisioning
+Technology in such a manner and making it available in accordance with
+the
+ Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in
+which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing,
+extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable
+Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+Software Agreement must inform the user of the terms and conditions that
+ govern
+ the Installable Software and must solicit acceptance by the end
+user in the manner prescribed in such Installable Software Agreement.
+Upon such
+ indication of agreement by the user, the provisioning Technology
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use,
+and/or re-export to
+ another country, of encryption software. BEFORE using any encryption
+software, please check the country's laws, regulations and policies
+concerning the import,
+ possession, or use, and re-export of encryption software, to see if
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/pom.xml b/org.eclipse.osbp.vaadin.addons.suggesttext/pom.xml
new file mode 100644
index 0000000..c0aa482
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/pom.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.osbp.releng.maven</groupId>
+ <artifactId>org.eclipse.osbp.releng.maven.parent.mbp</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath />
+ </parent>
+
+ <groupId>org.eclipse.osbp.vaadin.addons</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.addons.suggesttext</artifactId>
+ <packaging>bundle</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-server</artifactId>
+ <version>${vaadin.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-client</artifactId>
+ <version>${vaadin.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.vaadin.external.slf4j</groupId>
+ <artifactId>vaadin-slf4j-jdk14</artifactId>
+ <version>1.6.1</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.0.1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>${basedir}/src</sourceDirectory>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.0</version>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-Name>OS.bee Addon for Vaadin: Suggesttext</Bundle-Name>
+ <Bundle-SymbolicName>org.eclipse.osbp.vaadin.addons.suggesttext</Bundle-SymbolicName>
+ <Bundle-Version>0.9.0.{osgi-version-qualifier}</Bundle-Version>
+ <Require-Bundle>com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+ org.jsoup;bundle-version="[1.8.3,1.8.4)"
+ </Require-Bundle>
+ <Import-Package>
+ com.vaadin.*,
+ !fi.jasoft.*,
+ javax.servlet.annotation;resolution:=optional,
+ *
+ </Import-Package>
+ <Export-Package>
+ !LICENSE,!LICENSE.txt,!THIRD-PARTY.txt,!NOTICE,!README.txt,!VERSION.txt,!build.properties,
+ !VAADIN.*,
+ org.eclipse.osbp.vaadin.addons.*;version="0.9.0"
+ </Export-Package>
+ <Include-Resource>{maven-resources},LICENSE.txt,epl-v10.html</Include-Resource>
+ <_nouses>true</_nouses>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.2.1</version>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+
+ <!--This plugin's configuration is used to store Eclipse m2e settings
+ only. It has no influence on the Maven build itself. -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.maven.plugins
+ </groupId>
+ <artifactId>
+ maven-dependency-plugin
+ </artifactId>
+ <versionRange>
+ [2.0.0,)
+ </versionRange>
+ <goals>
+ <goal>
+ copy-dependencies
+ </goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>com.vaadin</groupId>
+ <artifactId>
+ vaadin-maven-plugin
+ </artifactId>
+ <versionRange>
+ [7.0-SNAPSHOT,)
+ </versionRange>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <!-- This is needed for the sources required by the client-side compiler
+ to be included in the produced JARs -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ </resource>
+ </resources>
+
+ </build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java
new file mode 100644
index 0000000..b46c4be
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java
@@ -0,0 +1,640 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.SuggestTextFieldClientRpc;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.SuggestTextFieldServerRpc;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.SuggestTextFieldState;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Container.Filterable;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.filter.Compare;
+import com.vaadin.data.util.filter.SimpleStringFilter;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.external.org.slf4j.Logger;
+import com.vaadin.external.org.slf4j.LoggerFactory;
+import com.vaadin.ui.AbstractSingleComponentContainer;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.TextField;
+import com.vaadin.util.ReflectTools;
+
+/**
+ * A field, which behaves like a textfield and offers suggestion functionality.
+ * <p>
+ * To get access to the underlying textfield, use {@link #getTextField()}. All
+ * functions available of {@link TextField} are also supported by this field.
+ * <p>
+ * To configure the suggestion functions, use the methods
+ * {@link #setSuggestionEnabled(boolean)}, {@link #setLimit(int)} and
+ * {@link #setPopupDelay(int)}.
+ * <p>
+ * To provide this field with queryable items, set a container using
+ * {@link #setContainerDataSource(Container) }(Filterable). It will use the
+ * given {@link #getFilterPropertyId() filterPropertyId} to query the container
+ * for suggestions.<br>
+ * The {@link #getCaptionPropertyId() captionPropertyId} is used to show results
+ * in the UI.<br>
+ * The {@link #getUniqueIdPropertyId()} is used to map the selected item
+ * clientside to the proper item in the container.
+ * <p>
+ * This field fires {@link SelectionChangedEvent} if a suggestion was selected
+ * at the clientside.
+ * <p>
+ * Additionally this field offers the functionality, that a suggestion is
+ * selected automatically, if only 1 record was returned by the query.
+ * <p>
+ * By default the popup can be opened pressing "ALT+KEY_DOWN". This can be
+ * adjusted by setters below.
+ */
+@SuppressWarnings("serial")
+public class SuggestTextField extends AbstractSingleComponentContainer {
+
+ /** The Constant LOGGER. */
+ private static final Logger LOGGER = LoggerFactory.getLogger(SuggestTextField.class);
+
+ /** The lock. */
+ private Object lock = new Object();
+
+ /** The caption property id. */
+ private Object captionPropertyId;
+
+ /** The unique id property id. */
+ private Object uniqueIdPropertyId;
+
+ /** The filter property id. */
+ private Object filterPropertyId;
+
+ /** The rpc. */
+ private SuggestTextFieldServerRpc rpc = new SuggestTextFieldServerRpc() {
+ @Override
+ public void requestSuggestions(final String handleId, final String filter, final int limit) {
+ if (needsUUIDMapping) {
+ uuidmapping.clear();
+ }
+ query(handleId, filter, limit);
+ }
+
+ @Override
+ public void selectionChanged(String id) {
+ Object itemId = getItemById(id);
+ if (itemId != null) {
+ fireSelectionChanged(itemId);
+ }
+ }
+ };
+
+ /** The container. */
+ private Container container;
+
+ /** The text field. */
+ private TextField textField;
+
+ /** The needs uuid mapping. */
+ private boolean needsUUIDMapping;
+
+ /** The uuidmapping. */
+ private Map<String, Object> uuidmapping = new HashMap<>();
+
+ /**
+ * Instantiates a new suggest text field.
+ */
+ public SuggestTextField() {
+ registerRpc(rpc);
+
+ textField = new TextField();
+ textField.setSizeFull();
+ setContent(textField);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.AbstractComponent#getState()
+ */
+ @Override
+ protected SuggestTextFieldState getState() {
+ return (SuggestTextFieldState) super.getState();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.AbstractComponent#getState(boolean)
+ */
+ @Override
+ protected SuggestTextFieldState getState(boolean markAsDirty) {
+ return (SuggestTextFieldState) super.getState(markAsDirty);
+ }
+
+ /**
+ * Gets the text field.
+ *
+ * @return the text field
+ */
+ public TextField getTextField() {
+ return textField;
+ }
+
+ /**
+ * Sets the value into the text field.
+ *
+ * @param value
+ */
+ public void setValue(String value) {
+ textField.setValue(value);
+ }
+
+ /**
+ * Returns the value from the text field.
+ *
+ * @return
+ */
+ public String getValue() {
+ return textField.getValue();
+ }
+
+ /**
+ * Opens the popup if not already opened and shows the suggested values.
+ */
+ public void openPopup() {
+ getRpcProxy(SuggestTextFieldClientRpc.class).openPopup();
+ }
+
+ /**
+ * Closes the popup if open. Else it has no effect.
+ */
+ public void closePopup() {
+ getRpcProxy(SuggestTextFieldClientRpc.class).closePopup();
+ }
+
+ /**
+ * Navigates the selected suggestion to the next one available.
+ */
+ public void navigateToNext() {
+ getRpcProxy(SuggestTextFieldClientRpc.class).navigateToNext();
+ }
+
+ /**
+ * Navigates the selected suggestion to the previous one available.
+ */
+ public void navigateToPrevious() {
+ getRpcProxy(SuggestTextFieldClientRpc.class).navigateToPrevious();
+ }
+
+ /**
+ * Selects the current selected suggestion and accepts it.
+ */
+ public void selectCurrent() {
+ getRpcProxy(SuggestTextFieldClientRpc.class).selectCurrent();
+ }
+
+ /**
+ * Returns the delay in ms.<br>
+ * The delay defines how many ms no keypress is done, before showing the
+ * popup.
+ *
+ * @return the popup delay
+ */
+ public int getPopupDelay() {
+ return getState(false).popupDelay;
+ }
+
+ /**
+ * Sets the delay in ms. <br>
+ * The delay defines how many ms no keypress is done, before showing the
+ * popup.
+ *
+ * @param delay
+ * the new popup delay
+ */
+ public void setPopupDelay(int delay) {
+ if (getState(false).popupDelay != delay) {
+ getState(true).popupDelay = delay;
+ }
+ }
+
+ /**
+ * True, if suggestions should be enabled. False otherwise.
+ *
+ * @param suggestionEnabled
+ * the new suggestion enabled
+ */
+ public void setSuggestionEnabled(boolean suggestionEnabled) {
+ if (getState(false).suggestionEnabled != suggestionEnabled) {
+ getState(true).suggestionEnabled = suggestionEnabled;
+ }
+
+ if (!suggestionEnabled && needsUUIDMapping) {
+ uuidmapping.clear();
+ }
+ }
+
+ /**
+ * Sets the number of items to be shown at clientside suggestions.
+ *
+ * @param limit
+ * the new limit
+ */
+ public void setLimit(int limit) {
+ if (getState(false).limit != limit) {
+ getState(true).limit = limit;
+ }
+ }
+
+ /**
+ * See {@link #setSuggestionEnabled(boolean)}.
+ *
+ * @return true, if is suggestion enabled
+ */
+ public boolean isSuggestionEnabled() {
+ return getState(false).suggestionEnabled;
+ }
+
+ /**
+ * See {@link #setLimit(int)}.
+ *
+ * @return the limit
+ */
+ public int getLimit() {
+ return getState(false).limit;
+ }
+
+ /**
+ * See {@link #setAutoHide(boolean)}.
+ *
+ * @return the limit
+ */
+ public boolean isAutoHide() {
+ return getState(false).autoHide;
+ }
+
+ /**
+ * If true, then the popup hides if the user clicks outside the popup.
+ *
+ * @param limit
+ * the new limit
+ */
+ public void setAutoHide(boolean autoHide) {
+ if (getState(false).autoHide != autoHide) {
+ getState(true).autoHide = autoHide;
+ }
+ }
+
+ /**
+ * Sets the key which need to be pressed to open the popup.<br>
+ * See {@link ShortcutAction.KeyCode}
+ *
+ * @param key
+ * the new key
+ */
+ public void setOpenPopupKey(int key) {
+ if (getState(false).openPopup_key != key) {
+ getState(true).openPopup_key = key;
+ }
+ }
+
+ /**
+ * Sets the key modifier which need to be pressed to open the popup.<br>
+ * See {@link ShortcutAction.ModifierKey}
+ *
+ * @param modifier
+ * the new modifier
+ */
+ public void setOpenPopupKeyModifier(int modifier) {
+ if (modifier != ShortcutAction.ModifierKey.ALT && modifier != ShortcutAction.ModifierKey.CTRL) {
+ throw new IllegalArgumentException("Only ALT and CTRL are allowed as modifiers.");
+ }
+
+ if (getState(false).openPopup_modifier != modifier) {
+ getState(true).openPopup_modifier = modifier;
+ }
+ }
+
+ /**
+ * Returns the key which need to be pressed to open the popup.<br>
+ * See {@link ShortcutAction.KeyCode}
+ *
+ * @param key
+ * the new key
+ */
+ public int getOpenPopupKey() {
+ return getState(false).openPopup_key;
+ }
+
+ /**
+ * Returns the key modifier which need to be pressed to open the popup.<br>
+ * See {@link ShortcutAction.ModifierKey}
+ *
+ * @param modifier
+ * the new modifier
+ */
+ public int getOpenPopupKeyModifier(int modifier) {
+ return getState(false).openPopup_modifier;
+ }
+
+ /**
+ * Respond.
+ *
+ * @param handle
+ * the handle
+ * @param result
+ * the result
+ */
+ protected void respond(String handle, List<SuggestionResult> result) {
+ getRpcProxy(SuggestTextFieldClientRpc.class).respond(handle, result);
+ }
+
+ /**
+ * See {@link #setFilterPropertyId(Object)}.
+ *
+ * @return the filter property id
+ */
+ public Object getFilterPropertyId() {
+ return filterPropertyId;
+ }
+
+ /**
+ * Sets the filterPropertyId. This id is used to query the container for
+ * matching results.
+ *
+ * @param filterPropertyId
+ * the new filter property id
+ */
+ public void setFilterPropertyId(Object filterPropertyId) {
+ this.filterPropertyId = filterPropertyId;
+
+ if (!container.getContainerPropertyIds().contains(filterPropertyId)) {
+ throw new IllegalArgumentException(filterPropertyId + " is not a valid container property.");
+ }
+ }
+
+ /**
+ * See {@link #setCaptionPropertyId(Object)}.
+ *
+ * @return the caption property id
+ */
+ public Object getCaptionPropertyId() {
+ return captionPropertyId;
+ }
+
+ /**
+ * This propertyId is used, to show results in the user interface.
+ *
+ * @param captionPropertyId
+ * the new caption property id
+ */
+ public void setCaptionPropertyId(Object captionPropertyId) {
+ this.captionPropertyId = captionPropertyId;
+
+ if (!container.getContainerPropertyIds().contains(captionPropertyId)) {
+ throw new IllegalArgumentException(captionPropertyId + " is not a valid container property.");
+ }
+ }
+
+ /**
+ * See {@link #setUniqueIdPropertyId(Object)}.
+ *
+ * @return the unique id property id
+ */
+ public Object getUniqueIdPropertyId() {
+ return uniqueIdPropertyId;
+ }
+
+ /**
+ * This property is used to map the selected record at clientside to the
+ * matching item from the container. Each record in the container needs to
+ * have a unique id.
+ *
+ * @param uniqueIdPropertyId
+ * the new unique id property id
+ */
+ public void setUniqueIdPropertyId(Object uniqueIdPropertyId) {
+ this.uniqueIdPropertyId = uniqueIdPropertyId;
+
+ if (!container.getContainerPropertyIds().contains(uniqueIdPropertyId)) {
+ throw new IllegalArgumentException(uniqueIdPropertyId + " is not a valid container property.");
+ }
+
+ Class<?> type = container.getType(uniqueIdPropertyId);
+ needsUUIDMapping = type == String.class ? false : true;
+ }
+
+ /**
+ * Sets the container datasource used to query suggestions.<br>
+ * <b>Attention:</b> The container must implement
+ * {@link Container.Filterable} and {@link Container.Indexed}.
+ *
+ * @param container
+ * the new container data source
+ */
+ public void setContainerDataSource(Container container) {
+ if (!(container instanceof Container.Filterable) || !(container instanceof Container.Indexed)) {
+ throw new IllegalArgumentException(
+ "The container must implement Container.Filterable and Container.Indexed");
+ }
+ this.container = container;
+ }
+
+ /**
+ * Returns the container datasource.
+ *
+ * @return the container data source
+ */
+ public Container getContainerDataSource() {
+ return container;
+ }
+
+ /**
+ * Query.
+ *
+ * @param handleId
+ * the handle id
+ * @param filter
+ * the filter
+ * @param limit
+ * the limit
+ */
+ protected void query(String handleId, String filter, int limit) {
+
+ if (filterPropertyId == null) {
+ throw new IllegalArgumentException("filterPropertyId must be set for query.");
+ }
+
+ if (captionPropertyId == null) {
+ throw new IllegalArgumentException("captionPropertyId must be set for query.");
+ }
+
+ if (uniqueIdPropertyId == null) {
+ throw new IllegalArgumentException("uniqueIdPropertyId must be set for query.");
+ }
+
+ LOGGER.debug("Query - filter:" + filter + " limit:" + limit + " handleId:" + handleId);
+
+ List<SuggestionResult> result = new ArrayList<>();
+ synchronized (lock) {
+ Container.Filterable filterable = (Filterable) container;
+ filterable.removeAllContainerFilters();
+ filterable.addContainerFilter(new SimpleStringFilter(filterPropertyId, filter, true, false));
+
+ int count = 0;
+ for (Object itemId : ((Container.Indexed) container).getItemIds(0, Math.max(limit, 3))) {
+ Item item = container.getItem(itemId);
+ String caption = (String) item.getItemProperty(captionPropertyId).getValue();
+ Object id = item.getItemProperty(uniqueIdPropertyId).getValue();
+
+ if (needsUUIDMapping) {
+ uuidmapping.put(id.toString(), id);
+ }
+ result.add(new SuggestionResult(id.toString(), caption));
+
+ count++;
+ if (count >= limit) {
+ break;
+ }
+ }
+ }
+
+ respond(handleId, result);
+ }
+
+ /**
+ * Gets the item by id.
+ *
+ * @param id
+ * the id
+ * @return the item by id
+ */
+ protected Object getItemById(String id) {
+ if (uniqueIdPropertyId == null) {
+ throw new IllegalArgumentException("uniqueIdPropertyId must be set for query.");
+ }
+
+ Object uuid = id;
+ if (needsUUIDMapping) {
+ uuid = uuidmapping.get(id);
+ uuidmapping.clear();
+ }
+
+ if (uuid == null) {
+ LOGGER.error("Can not access uuid==null. Given id was " + id);
+ return null;
+ }
+
+ synchronized (lock) {
+ Container.Filterable filterable = (Container.Filterable) container;
+ filterable.removeAllContainerFilters();
+ filterable.addContainerFilter(new Compare.Equal(uniqueIdPropertyId, uuid));
+
+ Container.Indexed indexed = (Container.Indexed) container;
+ return indexed.firstItemId();
+ }
+ }
+
+ /**
+ * Fire selection changed.
+ *
+ * @param itemId
+ * the item id
+ */
+ protected void fireSelectionChanged(Object itemId) {
+ LOGGER.debug("Selection changed event fired: " + itemId);
+ fireEvent(new SelectionChangedEvent(this, itemId));
+ }
+
+ /**
+ * Add listener which is being notified if the selection changes.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addSelectionChangedListener(SelectionChangedListener listener) {
+ addListener(SelectionChangedEvent.class, listener, SelectionChangedListener.SELECTION_CHANGED_METHOD);
+ }
+
+ /**
+ * Removes listener which is being notified if the selection changes.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeSelectionChangedListener(SelectionChangedListener listener) {
+ removeListener(SelectionChangedEvent.class, listener);
+ }
+
+ /**
+ * Is fired, if the selection of a suggestion clientside finished.
+ */
+ public static class SelectionChangedEvent extends Event {
+
+ /** The item id. */
+ private final Object itemId;
+
+ /**
+ * Instantiates a new selection changed event.
+ *
+ * @param source
+ * the source
+ * @param itemId
+ * the item id
+ */
+ public SelectionChangedEvent(Component source, Object itemId) {
+ super(source);
+ this.itemId = itemId;
+ }
+
+ /**
+ * Gets the item id.
+ *
+ * @return the item id
+ */
+ public Object getItemId() {
+ return itemId;
+ }
+
+ }
+
+ /**
+ * The listener interface for receiving selectionChanged events. The class
+ * that is interested in processing a selectionChanged event implements this
+ * interface, and the object created with that class is registered with a
+ * component using the component's <code>addSelectionChangedListener</code>
+ * method. When the selectionChanged event occurs, that object's appropriate
+ * method is invoked.
+ *
+ * @see SelectionChangedEvent
+ */
+ public interface SelectionChangedListener extends Serializable {
+
+ /** The Constant SELECTION_CHANGED_METHOD. */
+ public static final Method SELECTION_CHANGED_METHOD = ReflectTools.findMethod(SelectionChangedListener.class,
+ "selectionChanged", SelectionChangedEvent.class);
+
+ /**
+ * Selection changed.
+ *
+ * @param event
+ * the event
+ */
+ void selectionChanged(SelectionChangedEvent event);
+
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextWidgetset.gwt.xml b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextWidgetset.gwt.xml
new file mode 100644
index 0000000..d58fd0d
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextWidgetset.gwt.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
+<module>
+ <inherits name="com.vaadin.DefaultWidgetSet" />
+
+ <!-- Uncomment the following to compile the widgetset for one browser only.
+ Multiple browsers can be specified as a comma separated list. The supported
+ user agents at the moment of writing were: ie8,ie9,gecko1_8,safari,opera
+ The value gecko1_8 is used for Firefox and safari is used for webkit based
+ browsers including Google Chrome. -->
+
+ <!-- To enable SuperDevMode, uncomment this line. See https://vaadin.com/wiki/-/wiki/Main/Using%20SuperDevMode
+ for more information and instructions. -->
+ <!-- <set-configuration-property name="devModeRedirectEnabled" value="true" /> -->
+
+<!-- <add-linker name="xsiframe" /> -->
+<!-- <set-configuration-property name="devModeRedirectEnabled" value="true" /> -->
+<!-- <set-property name="user.agent" value="safari" /> -->
+
+ <stylesheet src="suggesttext/styles.css" />
+
+</module>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/ODelegatingOracle.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/ODelegatingOracle.java
new file mode 100644
index 0000000..0ad5543
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/ODelegatingOracle.java
@@ -0,0 +1,169 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.FutureCallback;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.SuggestOracle;
+
+// TODO: Auto-generated Javadoc
+/**
+ * An oracle that delegates to a serverside RPC.
+ */
+public class ODelegatingOracle extends SuggestOracle {
+
+ /** The delegate. */
+ private final OQueryDelegate delegate;
+
+ /** The delay timer. */
+ private CustomTimer delayTimer;
+
+ /** The popup delay. */
+ private int popupDelay;
+
+ /** The o suggest box. */
+ private OSuggestBox oSuggestBox;
+
+ /** The suggestion enabled. */
+ private boolean suggestionEnabled;
+
+ /**
+ * Instantiates a new o delegating oracle.
+ *
+ * @param delegate the delegate
+ */
+ public ODelegatingOracle(OQueryDelegate delegate) {
+ this.delegate = delegate;
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.user.client.ui.SuggestOracle#requestSuggestions(com.google.gwt.user.client.ui.SuggestOracle.Request, com.google.gwt.user.client.ui.SuggestOracle.Callback)
+ */
+ @Override
+ public void requestSuggestions(final Request request, final Callback callback) {
+ if (request.getQuery() == null || request.equals("") || !suggestionEnabled) {
+ return;
+ }
+
+ if (delayTimer == null) {
+ delayTimer = new CustomTimer();
+ } else {
+ delayTimer.cancel();
+ }
+ delayTimer.setRequest(request);
+ delayTimer.setCallback(callback);
+ delayTimer.schedule(popupDelay);
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.user.client.ui.SuggestOracle#requestDefaultSuggestions(com.google.gwt.user.client.ui.SuggestOracle.Request, com.google.gwt.user.client.ui.SuggestOracle.Callback)
+ */
+ public void requestDefaultSuggestions(Request request, Callback callback) {
+ if (delayTimer != null) {
+ delayTimer.cancel();
+ delayTimer = null;
+ }
+
+ super.requestDefaultSuggestions(request, callback);
+ }
+
+ /**
+ * Sets the delay until the popup occurs.
+ *
+ * @param popupDelay the new popup delay
+ */
+ public void setPopupDelay(int popupDelay) {
+ this.popupDelay = popupDelay;
+ }
+
+ /**
+ * Timer to implement the popupDelay.
+ */
+ private class CustomTimer extends Timer {
+
+ /** The request. */
+ private Request request;
+
+ /** The callback. */
+ private Callback callback;
+
+ /**
+ * Sets the request.
+ *
+ * @param request the new request
+ */
+ public void setRequest(Request request) {
+ this.request = request;
+ }
+
+ /**
+ * Sets the callback.
+ *
+ * @param callback the new callback
+ */
+ public void setCallback(Callback callback) {
+ this.callback = callback;
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.user.client.Timer#run()
+ */
+ @Override
+ public void run() {
+ // make an rpc call
+ delegate.requestSuggestions(request, new FutureCallback() {
+ @Override
+ public void respondSuggestions(List<SuggestionResult> suggestions) {
+
+ if (suggestions.size() == 1) {
+ oSuggestBox.setSingleSuggestionAndClosePopup(new OSuggestion(suggestions.get(0)));
+ } else {
+ List<OSuggestion> temp = new ArrayList<>();
+ for (SuggestionResult r : suggestions) {
+ temp.add(new OSuggestion(r));
+ }
+
+ Response response = new Response();
+ response.setMoreSuggestions(false);
+ response.setSuggestions(temp);
+
+ callback.onSuggestionsReady(request, response);
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * Sets the suggest box.
+ *
+ * @param oSuggestBox the new suggest box
+ */
+ protected void setSuggestBox(OSuggestBox oSuggestBox) {
+ this.oSuggestBox = oSuggestBox;
+ }
+
+ /**
+ * True, if the suggestion box should be used.
+ *
+ * @param suggestionEnabled the new suggestion enabled
+ */
+ public void setSuggestionEnabled(boolean suggestionEnabled) {
+ this.suggestionEnabled = suggestionEnabled;
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OQueryDelegate.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OQueryDelegate.java
new file mode 100644
index 0000000..50c9a0f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OQueryDelegate.java
@@ -0,0 +1,115 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.Date;
+import java.util.List;
+
+import com.google.gwt.user.client.ui.SuggestOracle.Request;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This class is responsible to delegate the query for suggestions to the serverside rpc.
+ */
+public class OQueryDelegate {
+
+ /** The server rpc. */
+ // instance
+ private final SuggestTextFieldServerRpc serverRpc;
+
+ /** The current handle. */
+ private String currentHandle;
+
+ /** The current callback. */
+ private FutureCallback currentCallback;
+
+ /**
+ * Instantiates a new o query delegate.
+ *
+ * @param serverRpc the server rpc
+ */
+ public OQueryDelegate(SuggestTextFieldServerRpc serverRpc) {
+ this.serverRpc = serverRpc;
+ }
+
+ /**
+ * Request suggestions.
+ *
+ * @param request the request
+ * @param callback the callback
+ */
+ protected void requestSuggestions(Request request, FutureCallback callback) {
+ // dismiss older callbacks
+ currentHandle = Long.toHexString(new Date().getTime());
+ currentCallback = callback;
+
+ serverRpc.requestSuggestions(currentHandle, request.getQuery(), request.getLimit());
+ }
+
+ /**
+ * Respond.
+ *
+ * @param handle the handle
+ * @param response the response
+ */
+ public void respond(String handle, List<SuggestionResult> response) {
+ if (currentHandle.equals(handle)) {
+ currentCallback.respondSuggestions(response);
+ }
+ }
+
+ /**
+ * A future to wait for responds from serverside.
+ */
+ public interface FutureCallback {
+
+ /**
+ * Respond suggestions.
+ *
+ * @param suggestions the suggestions
+ */
+ void respondSuggestions(List<SuggestionResult> suggestions);
+ }
+
+ /**
+ * The Class SuggestionResult.
+ */
+ public static class SuggestionResult {
+
+ /** The uuid. */
+ public String uuid;
+
+ /** The display text. */
+ public String displayText;
+
+ /**
+ * Instantiates a new suggestion result.
+ */
+ public SuggestionResult() {
+
+ }
+
+ /**
+ * Instantiates a new suggestion result.
+ *
+ * @param uuid the uuid
+ * @param displayText the display text
+ */
+ public SuggestionResult(String uuid, String displayText) {
+ super();
+ this.uuid = uuid;
+ this.displayText = displayText;
+ }
+
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java
new file mode 100644
index 0000000..50dc26d
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java
@@ -0,0 +1,1365 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.editor.client.IsEditor;
+import com.google.gwt.editor.client.LeafValueEditor;
+import com.google.gwt.editor.client.adapters.TakesValueEditor;
+import com.google.gwt.event.dom.client.HasAllKeyHandlers;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyDownEvent;
+import com.google.gwt.event.dom.client.KeyDownHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.event.dom.client.KeyUpEvent;
+import com.google.gwt.event.dom.client.KeyUpHandler;
+import com.google.gwt.event.logical.shared.HasSelectionHandlers;
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.DecoratedPopupPanel;
+import com.google.gwt.user.client.ui.Focusable;
+import com.google.gwt.user.client.ui.HasAnimation;
+import com.google.gwt.user.client.ui.HasEnabled;
+import com.google.gwt.user.client.ui.HasText;
+import com.google.gwt.user.client.ui.HasValue;
+import com.google.gwt.user.client.ui.MenuBar;
+import com.google.gwt.user.client.ui.MenuItem;
+import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.PopupPanel.AnimationType;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.SuggestBox;
+import com.google.gwt.user.client.ui.SuggestOracle;
+import com.google.gwt.user.client.ui.SuggestOracle.Callback;
+import com.google.gwt.user.client.ui.SuggestOracle.Request;
+import com.google.gwt.user.client.ui.SuggestOracle.Response;
+import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
+import com.google.gwt.user.client.ui.UIObject;
+import com.google.gwt.user.client.ui.ValueBoxBase;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ApplicationConnection;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.Util;
+import com.vaadin.client.ui.VOverlay;
+import com.vaadin.event.ShortcutAction;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Copy from {@link SuggestBox} but {@link #box} can be initialized after new
+ * instance was created. Copy was needed since {@link #box} is final in
+ * {@link com.google.gwt.user.client.ui.SuggestBox}.
+ */
+public class OSuggestBox extends SimplePanel implements HasText, Focusable, HasEnabled, HasAllKeyHandlers,
+ HasValue<String>, HasSelectionHandlers<Suggestion>, IsEditor<LeafValueEditor<String>> {
+
+ /**
+ * The callback used when a user selects a {@link Suggestion}.
+ */
+ public static interface SuggestionCallback {
+
+ /**
+ * On suggestion selected.
+ *
+ * @param suggestion
+ * the suggestion
+ */
+ void onSuggestionSelected(Suggestion suggestion);
+ }
+
+ /**
+ * Used to display suggestions to the user.
+ */
+ public abstract static class SuggestionDisplay {
+
+ /**
+ * Get the currently selected {@link Suggestion} in the display.
+ *
+ * @return the current suggestion, or null if none selected
+ */
+ protected abstract Suggestion getCurrentSelection();
+
+ /**
+ * Hide the list of suggestions from view.
+ */
+ protected abstract void hideSuggestions();
+
+ /**
+ * Returns true, if the popup is showing.
+ *
+ * @return
+ */
+ protected abstract boolean isShowing();
+
+ /**
+ * Highlight the suggestion directly below the current selection in the
+ * list.
+ */
+ protected abstract void moveSelectionDown();
+
+ /**
+ * Highlight the suggestion directly above the current selection in the
+ * list.
+ */
+ protected abstract void moveSelectionUp();
+
+ /**
+ * Set the debug id of widgets used in the SuggestionDisplay.
+ *
+ * @param suggestBoxBaseID
+ * the baseID of the {@link OSuggestBox}
+ * @see UIObject#onEnsureDebugId(String)
+ */
+ protected void onEnsureDebugId(String suggestBoxBaseID) {
+ }
+
+ /**
+ * Accepts information about whether there were more suggestions
+ * matching than were provided to {@link #showSuggestions}.
+ *
+ * @param hasMoreSuggestions
+ * true if more matches were available
+ * @param numMoreSuggestions
+ * number of more matches available. If the specific number
+ * is unknown, 0 will be passed.
+ */
+ protected void setMoreSuggestions(boolean hasMoreSuggestions, int numMoreSuggestions) {
+ // Subclasses may optionally implement.
+ }
+
+ /**
+ * Update the list of visible suggestions.
+ *
+ * Use care when using isDisplayStringHtml; it is an easy way to expose
+ * script-based security problems.
+ *
+ * @param suggestBox
+ * the suggest box where the suggestions originated
+ * @param suggestions
+ * the suggestions to show
+ * @param isDisplayStringHTML
+ * should the suggestions be displayed as HTML
+ * @param isAutoSelectEnabled
+ * if true, the first item should be selected automatically
+ * @param callback
+ * the callback used when the user makes a suggestion
+ */
+ protected abstract void showSuggestions(OSuggestBox suggestBox, Collection<? extends Suggestion> suggestions,
+ boolean isDisplayStringHTML, boolean isAutoSelectEnabled, SuggestionCallback callback);
+
+ /**
+ * If true, then the popup will hide when the user clicks outside the
+ * popup.
+ *
+ * @param autoHide
+ */
+ protected abstract void setAutoHide(boolean autoHide);
+
+ /**
+ * The owner of the popup.
+ *
+ * @param oSuggestBox
+ */
+ protected abstract void setOwner(OSuggestBox oSuggestBox);
+
+ }
+
+ /**
+ * <p>
+ * The default implementation of {@link SuggestionDisplay} displays
+ * suggestions in a {@link PopupPanel} beneath the {@link OSuggestBox}.
+ *
+ *
+ * <h3>CSS Style Rules</h3>
+ * <dl>
+ * <dt>.o-SuggestBoxPopup</dt>
+ * <dd>the suggestion popup</dd>
+ * <dt>.o-SuggestBoxPopup .item</dt>
+ * <dd>an unselected suggestion</dd>
+ * <dt>.o-SuggestBoxPopup .item-selected</dt>
+ * <dd>a selected suggestion</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupTopLeft</dt>
+ * <dd>the top left cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupTopLeftInner</dt>
+ * <dd>the inner element of the cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupTopCenter</dt>
+ * <dd>the top center cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupTopCenterInner</dt>
+ * <dd>the inner element of the cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupTopRight</dt>
+ * <dd>the top right cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupTopRightInner</dt>
+ * <dd>the inner element of the cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupMiddleLeft</dt>
+ * <dd>the middle left cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupMiddleLeftInner</dt>
+ * <dd>the inner element of the cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupMiddleCenter</dt>
+ * <dd>the middle center cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupMiddleCenterInner</dt>
+ * <dd>the inner element of the cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupMiddleRight</dt>
+ * <dd>the middle right cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupMiddleRightInner</dt>
+ * <dd>the inner element of the cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupBottomLeft</dt>
+ * <dd>the bottom left cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupBottomLeftInner</dt>
+ * <dd>the inner element of the cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupBottomCenter</dt>
+ * <dd>the bottom center cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupBottomCenterInner</dt>
+ * <dd>the inner element of the cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupBottomRight</dt>
+ * <dd>the bottom right cell</dd>
+ * <dt>.o-SuggestBoxPopup .suggestPopupBottomRightInner</dt>
+ * <dd>the inner element of the cell</dd>
+ * </dl>
+ */
+ public static class DefaultSuggestionDisplay extends SuggestionDisplay implements HasAnimation {
+
+ /** The suggestion menu. */
+ private final SuggestionMenu suggestionMenu;
+
+ /** The suggestion popup. */
+ private final PopupPanel suggestionPopup;
+
+ /**
+ * The suggest box this display was prepared for. Is used to determine
+ * the {@link ApplicationConnection} and the v-overlay-container.
+ */
+ private OSuggestBox oSuggestBox;
+
+ /**
+ * We need to keep track of the last {@link OSuggestBox} because it acts
+ * as an autoHide partner for the {@link PopupPanel}. If we use the same
+ * display for multiple {@link OSuggestBox}, we need to switch the
+ * autoHide partner.
+ */
+ private OSuggestBox lastSuggestBox = null;
+
+ /**
+ * Sub-classes making use of {@link decorateSuggestionList} to add
+ * elements to the suggestion popup _may_ want those elements to show
+ * even when there are 0 suggestions. An example would be showing a "No
+ * matches" message.
+ */
+ private boolean hideWhenEmpty = true;
+
+ /**
+ * Object to position the suggestion display next to, instead of the
+ * associated suggest box.
+ */
+ private UIObject positionRelativeTo;
+
+ /**
+ * Construct a new {@link DefaultSuggestionDisplay}.
+ */
+ public DefaultSuggestionDisplay() {
+ suggestionMenu = new SuggestionMenu(true);
+ suggestionPopup = createPopup();
+ suggestionPopup.setWidget(decorateSuggestionList(suggestionMenu));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+ * SuggestionDisplay#hideSuggestions()
+ */
+ @Override
+ public void hideSuggestions() {
+ suggestionPopup.hide();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.HasAnimation#isAnimationEnabled()
+ */
+ public boolean isAnimationEnabled() {
+ return suggestionPopup.isAnimationEnabled();
+ }
+
+ /**
+ * Check whether or not the suggestion list is hidden when there are no
+ * suggestions to display.
+ *
+ * @return true if hidden when empty, false if not
+ */
+ public boolean isSuggestionListHiddenWhenEmpty() {
+ return hideWhenEmpty;
+ }
+
+ /**
+ * Check whether or not the list of suggestions is being shown.
+ *
+ * @return true if the suggestions are visible, false if not
+ */
+ public boolean isSuggestionListShowing() {
+ return suggestionPopup.isShowing();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.HasAnimation#setAnimationEnabled(
+ * boolean)
+ */
+ public void setAnimationEnabled(boolean enable) {
+ suggestionPopup.setAnimationEnabled(enable);
+ }
+
+ /**
+ * Sets the style name of the suggestion popup.
+ *
+ * @param style
+ * the new primary style name
+ * @see UIObject#setStyleName(String)
+ */
+ public void setPopupStyleName(String style) {
+ suggestionPopup.setStyleName(style);
+ }
+
+ /**
+ * Sets the UI object where the suggestion display should appear next
+ * to.
+ *
+ * @param uiObject
+ * the uiObject used for positioning, or null to position
+ * relative to the suggest box
+ */
+ public void setPositionRelativeTo(UIObject uiObject) {
+ positionRelativeTo = uiObject;
+ }
+
+ /**
+ * Set whether or not the suggestion list should be hidden when there
+ * are no suggestions to display. Defaults to true.
+ *
+ * @param hideWhenEmpty
+ * true to hide when empty, false not to
+ */
+ public void setSuggestionListHiddenWhenEmpty(boolean hideWhenEmpty) {
+ this.hideWhenEmpty = hideWhenEmpty;
+ }
+
+ /**
+ * Create the PopupPanel that will hold the list of suggestions.
+ *
+ * @return the popup panel
+ */
+ protected PopupPanel createPopup() {
+ PopupPanel p = new DecoratedPopupPanel(true, false) {
+ @Override
+ protected void onAttach() {
+ // Move the overlay to the appropriate overlay container
+ getOverlayContainer().appendChild(getElement());
+
+ addStyleName(oSuggestBox.getStyleName());
+
+ super.onAttach();
+ }
+ };
+ p.setStyleName("o-SuggestBoxPopup");
+ p.setPreviewingAllNativeEvents(true);
+ p.setAnimationType(AnimationType.ROLL_DOWN);
+ p.setAutoHideEnabled(true);
+ return p;
+ }
+
+ /**
+ * Wrap the list of suggestions before adding it to the popup. You can
+ * override this method if you want to wrap the suggestion list in a
+ * decorator.
+ *
+ * @param suggestionList
+ * the widget that contains the list of suggestions
+ * @return the suggestList, optionally inside of a wrapper
+ */
+ protected Widget decorateSuggestionList(Widget suggestionList) {
+ return suggestionList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+ * SuggestionDisplay#getCurrentSelection()
+ */
+ @Override
+ protected Suggestion getCurrentSelection() {
+ if (!isSuggestionListShowing()) {
+ return null;
+ }
+ MenuItem item = suggestionMenu.getSelectedItem();
+ return item == null ? null : ((SuggestionMenuItem) item).getSuggestion();
+ }
+
+ /**
+ * Get the {@link PopupPanel} used to display suggestions.
+ *
+ * @return the popup panel
+ */
+ protected PopupPanel getPopupPanel() {
+ return suggestionPopup;
+ }
+
+ /**
+ * Get the {@link MenuBar} used to display suggestions.
+ *
+ * @return the suggestions menu
+ */
+ protected MenuBar getSuggestionMenu() {
+ return suggestionMenu;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+ * SuggestionDisplay#moveSelectionDown()
+ */
+ @Override
+ protected void moveSelectionDown() {
+ // Make sure that the menu is actually showing. These keystrokes
+ // are only relevant when choosing a suggestion.
+ if (isSuggestionListShowing()) {
+ // If nothing is selected, getSelectedItemIndex will return -1
+ // and we
+ // will select index 0 (the first item) by default.
+ suggestionMenu.selectItem(suggestionMenu.getSelectedItemIndex() + 1);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+ * SuggestionDisplay#moveSelectionUp()
+ */
+ @Override
+ protected void moveSelectionUp() {
+ // Make sure that the menu is actually showing. These keystrokes
+ // are only relevant when choosing a suggestion.
+ if (isSuggestionListShowing()) {
+ // if nothing is selected, then we should select the last
+ // suggestion by
+ // default. This is because, in some cases, the suggestions menu
+ // will
+ // appear above the text box rather than below it (for example,
+ // if the
+ // text box is at the bottom of the window and the suggestions
+ // will not
+ // fit below the text box). In this case, users would expect to
+ // be able
+ // to use the up arrow to navigate to the suggestions.
+ if (suggestionMenu.getSelectedItemIndex() == -1) {
+ suggestionMenu.selectItem(suggestionMenu.getNumItems() - 1);
+ } else {
+ suggestionMenu.selectItem(suggestionMenu.getSelectedItemIndex() - 1);
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+ * SuggestionDisplay#showSuggestions(org.eclipse.osbp.vaadin.addons.
+ * suggesttext.client.OSuggestBox, java.util.Collection, boolean,
+ * boolean,
+ * org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+ * SuggestionCallback)
+ */
+ @Override
+ protected void showSuggestions(final OSuggestBox suggestBox, Collection<? extends Suggestion> suggestions,
+ boolean isDisplayStringHTML, boolean isAutoSelectEnabled, final SuggestionCallback callback) {
+ // Hide the popup if there are no suggestions to display.
+ boolean anySuggestions = (suggestions != null && suggestions.size() > 0);
+ if (!anySuggestions && hideWhenEmpty) {
+ hideSuggestions();
+ return;
+ }
+
+ // Hide the popup before we manipulate the menu within it. If we do
+ // not
+ // do this, some browsers will redraw the popup as items are removed
+ // and added to the menu.
+ if (suggestionPopup.isAttached()) {
+ suggestionPopup.hide();
+ }
+
+ suggestionMenu.clearItems();
+
+ for (final Suggestion curSuggestion : suggestions) {
+ final SuggestionMenuItem menuItem = new SuggestionMenuItem(curSuggestion);
+ menuItem.setScheduledCommand(new ScheduledCommand() {
+ public void execute() {
+ callback.onSuggestionSelected(curSuggestion);
+ }
+ });
+
+ suggestionMenu.addItem(menuItem);
+ }
+
+ if (isAutoSelectEnabled && anySuggestions) {
+ // Select the first item in the suggestion menu.
+ suggestionMenu.selectItem(0);
+ }
+
+ // Link the popup autoHide to the TextBox.
+ if (lastSuggestBox != suggestBox) {
+ // If the suggest box has changed, free the old one first.
+ if (lastSuggestBox != null) {
+ suggestionPopup.removeAutoHidePartner(lastSuggestBox.getElement());
+ }
+ lastSuggestBox = suggestBox;
+ suggestionPopup.addAutoHidePartner(suggestBox.getElement());
+ }
+
+ // Show the popup under the TextBox.
+ suggestionPopup.showRelativeTo(positionRelativeTo != null ? positionRelativeTo : suggestBox);
+ }
+
+ @Override
+ protected void setAutoHide(boolean autoHide) {
+ suggestionPopup.setAutoHideEnabled(autoHide);
+ }
+
+ @Override
+ protected void setOwner(OSuggestBox oSuggestBox) {
+ this.oSuggestBox = oSuggestBox;
+ }
+
+ /**
+ * Gets the 'overlay container' element. Tries to find the current
+ * {@link ApplicationConnection} using
+ * {@link #getApplicationConnection()}.
+ *
+ * @return the overlay container element for the current
+ * {@link ApplicationConnection} or another element if the
+ * current {@link ApplicationConnection} cannot be determined.
+ */
+ public Element getOverlayContainer() {
+ ApplicationConnection ac = getApplicationConnection();
+ if (ac == null) {
+ // could not figure out which one we belong to, styling will
+ // probably fail
+ Logger.getLogger(getClass().getSimpleName()).log(Level.WARNING,
+ "Could not determine ApplicationConnection for Overlay. Overlay will be attached directly to the root panel");
+ return RootPanel.get().getElement();
+ } else {
+ return getOverlayContainer(ac);
+ }
+ }
+
+ /**
+ * Get the {@link ApplicationConnection} that this overlay belongs to.
+ *
+ * @return
+ */
+ protected ApplicationConnection getApplicationConnection() {
+ ComponentConnector c = Util.findConnectorFor(oSuggestBox);
+ if (c != null) {
+ return c.getConnection();
+ }
+ return null;
+ }
+
+ /**
+ * Gets the 'overlay container' element pertaining to the given
+ * {@link ApplicationConnection}. Each overlay should be created in a
+ * overlay container element, so that the correct theme and styles can
+ * be applied.
+ *
+ * @param ac
+ * A reference to {@link ApplicationConnection}
+ * @return The overlay container
+ */
+ @SuppressWarnings("deprecation")
+ public Element getOverlayContainer(ApplicationConnection ac) {
+ String id = ac.getConfiguration().getRootPanelId();
+ id = id += "-overlays";
+ Element container = DOM.getElementById(id);
+ if (container == null) {
+ container = DOM.createDiv();
+ container.setId(id);
+ String styles = ac.getUIConnector().getWidget().getParent().getStyleName();
+ if (styles != null && !styles.equals("")) {
+ container.addClassName(styles);
+ }
+ container.addClassName(VOverlay.CLASSNAME_CONTAINER);
+ RootPanel.get().getElement().appendChild(container);
+ }
+ return DOM.asOld(container);
+ }
+
+ @Override
+ protected boolean isShowing() {
+ return suggestionPopup.isShowing();
+ }
+ }
+
+ /**
+ * The SuggestionMenu class is used for the display and selection of
+ * suggestions in the XSuggestBox widget. SuggestionMenu differs from
+ * MenuBar in that it always has a vertical orientation, and it has no
+ * submenus. It also allows for programmatic selection of items in the menu,
+ * and programmatically performing the action associated with the selected
+ * item. In the MenuBar class, items cannot be selected programatically -
+ * they can only be selected when the user places the mouse over a particlar
+ * item. Additional methods in SuggestionMenu provide information about the
+ * number of items in the menu, and the index of the currently selected
+ * item.
+ */
+ private static class SuggestionMenu extends MenuBar {
+
+ /**
+ * Instantiates a new suggestion menu.
+ *
+ * @param vertical
+ * the vertical
+ */
+ public SuggestionMenu(boolean vertical) {
+ super(vertical);
+ // Make sure that CSS styles specified for the default Menu classes
+ // do not affect this menu
+ setStyleName("");
+ setFocusOnHoverEnabled(false);
+ }
+
+ /**
+ * Gets the num items.
+ *
+ * @return the num items
+ */
+ public int getNumItems() {
+ return getItems().size();
+ }
+
+ /**
+ * Returns the index of the menu item that is currently selected.
+ *
+ * @return returns the selected item
+ */
+ public int getSelectedItemIndex() {
+ // The index of the currently selected item can only be
+ // obtained if the menu is showing.
+ MenuItem selectedItem = getSelectedItem();
+ if (selectedItem != null) {
+ return getItems().indexOf(selectedItem);
+ }
+ return -1;
+ }
+
+ /**
+ * Selects the item at the specified index in the menu. Selecting the
+ * item does not perform the item's associated action; it only changes
+ * the style of the item and updates the value of
+ * SuggestionMenu.selectedItem.
+ *
+ * @param index
+ * index
+ */
+ public void selectItem(int index) {
+ List<MenuItem> items = getItems();
+ if (index > -1 && index < items.size()) {
+ selectItem(items.get(index));
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.MenuBar#getSelectedItem()
+ */
+ @Override
+ protected MenuItem getSelectedItem() {
+ return super.getSelectedItem();
+ }
+ }
+
+ /**
+ * Class for menu items in a SuggestionMenu. A SuggestionMenuItem differs
+ * from a MenuItem in that each item is backed by a Suggestion object. The
+ * text of each menu item is derived from the display string of a Suggestion
+ * object, and each item stores a reference to its Suggestion object.
+ */
+ private static class SuggestionMenuItem extends MenuItem {
+
+ /** The Constant STYLENAME_DEFAULT. */
+ private static final String STYLENAME_DEFAULT = "item";
+
+ /** The suggestion. */
+ private Suggestion suggestion;
+
+ /**
+ * Instantiates a new suggestion menu item.
+ *
+ * @param suggestion
+ * the suggestion
+ */
+ public SuggestionMenuItem(Suggestion suggestion) {
+ super(suggestion.getDisplayString(), (SuggestionMenu) null);
+ // Each suggestion should be placed in a single row in the
+ // suggestion
+ // menu. If the window is resized and the suggestion cannot fit on a
+ // single row, it should be clipped (instead of wrapping around and
+ // taking up a second row).
+ getElement().getStyle().setProperty("whiteSpace", "nowrap");
+ setStyleName(STYLENAME_DEFAULT);
+ setSuggestion(suggestion);
+ }
+
+ /**
+ * Gets the suggestion.
+ *
+ * @return the suggestion
+ */
+ public Suggestion getSuggestion() {
+ return suggestion;
+ }
+
+ /**
+ * Sets the suggestion.
+ *
+ * @param suggestion
+ * the new suggestion
+ */
+ public void setSuggestion(Suggestion suggestion) {
+ this.suggestion = suggestion;
+ }
+ }
+
+ /** The Constant STYLENAME_DEFAULT. */
+ private static final String STYLENAME_DEFAULT = "o-XSuggestBox";
+
+ /** The limit. */
+ private int limit = 20;
+
+ /** The selects first item. */
+ private boolean selectsFirstItem = true;
+
+ /** The oracle. */
+ private SuggestOracle oracle;
+
+ /** The current text. */
+ private String currentText;
+
+ /** The editor. */
+ private LeafValueEditor<String> editor;
+
+ /** The display. */
+ private final SuggestionDisplay display;
+
+ /** The box. */
+ private ValueBoxBase<String> box;
+
+ /** The callback. */
+ private final Callback callback = new Callback() {
+ public void onSuggestionsReady(Request request, Response response) {
+ // If disabled while request was in-flight, drop it
+ if (!isEnabled()) {
+ return;
+ }
+ display.setMoreSuggestions(response.hasMoreSuggestions(), response.getMoreSuggestionsCount());
+ display.showSuggestions(OSuggestBox.this, response.getSuggestions(), oracle.isDisplayStringHTML(),
+ isAutoSelectEnabled(), suggestionCallback);
+ }
+ };
+
+ /** The suggestion callback. */
+ private final SuggestionCallback suggestionCallback = new SuggestionCallback() {
+ public void onSuggestionSelected(Suggestion suggestion) {
+ box.setFocus(true);
+ setNewSelection(suggestion);
+ }
+ };
+
+ private int openPopupKey;
+
+ private int openPopupModifier;
+
+ /**
+ * Constructor for {@link OSuggestBox}. The text box will be removed from
+ * it's current location and wrapped by the {@link OSuggestBox}.
+ *
+ * @param oracle
+ * supplies suggestions based upon the current contents of the
+ * text widget
+ */
+ public OSuggestBox(SuggestOracle oracle) {
+ this(oracle, new DefaultSuggestionDisplay());
+ }
+
+ /**
+ * Constructor for {@link OSuggestBox}. The text box will be removed from
+ * it's current location and wrapped by the {@link OSuggestBox}.
+ *
+ * @param oracle
+ * supplies suggestions based upon the current contents of the
+ * text widget
+ * @param suggestDisplay
+ * the class used to display suggestions
+ */
+ public OSuggestBox(SuggestOracle oracle, SuggestionDisplay suggestDisplay) {
+ this.display = suggestDisplay;
+ this.display.setOwner(this);
+
+ setOracle(oracle);
+
+ ((ODelegatingOracle) getSuggestOracle()).setSuggestBox(this);
+ }
+
+ /**
+ * Sets the popup delay.
+ *
+ * @param popupDelay
+ * the new popup delay
+ */
+ public void setPopupDelay(int popupDelay) {
+ ((ODelegatingOracle) getSuggestOracle()).setPopupDelay(popupDelay);
+ }
+
+ /**
+ * Sets the single suggestion and close popup.
+ *
+ * @param selectedSuggestion
+ * the new single suggestion and close popup
+ */
+ public void setSingleSuggestionAndClosePopup(Suggestion selectedSuggestion) {
+ assert selectedSuggestion != null : "suggestion cannot be null";
+ String currentText = selectedSuggestion.getReplacementString();
+ setText(currentText);
+ ((DefaultSuggestionDisplay) getSuggestionDisplay()).hideSuggestions();
+ SelectionEvent.fire(this, selectedSuggestion);
+ }
+
+ /**
+ * Initialize.
+ *
+ * @param box
+ * the box
+ */
+ public void initialize(ValueBoxBase<String> box) {
+ assert this.box == null : "box must not be set twice";
+ this.box = box;
+
+ setWidget(box);
+ addEventsToTextBox();
+
+ setStyleName(STYLENAME_DEFAULT);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.google.gwt.event.dom.client.HasKeyDownHandlers#addKeyDownHandler(com.
+ * google.gwt.event.dom.client.KeyDownHandler)
+ */
+ public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
+ return addDomHandler(handler, KeyDownEvent.getType());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.google.gwt.event.dom.client.HasKeyPressHandlers#addKeyPressHandler(
+ * com.google.gwt.event.dom.client.KeyPressHandler)
+ */
+ public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
+ return addDomHandler(handler, KeyPressEvent.getType());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.google.gwt.event.dom.client.HasKeyUpHandlers#addKeyUpHandler(com.
+ * google.gwt.event.dom.client.KeyUpHandler)
+ */
+ public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) {
+ return addDomHandler(handler, KeyUpEvent.getType());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.event.logical.shared.HasSelectionHandlers#
+ * addSelectionHandler(com.google.gwt.event.logical.shared.SelectionHandler)
+ */
+ public HandlerRegistration addSelectionHandler(SelectionHandler<Suggestion> handler) {
+ return addHandler(handler, SelectionEvent.getType());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.event.logical.shared.HasValueChangeHandlers#
+ * addValueChangeHandler(com.google.gwt.event.logical.shared.
+ * ValueChangeHandler)
+ */
+ public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) {
+ return addHandler(handler, ValueChangeEvent.getType());
+ }
+
+ /**
+ * Returns a {@link TakesValueEditor} backed by the XSuggestBox.
+ *
+ * @return the leaf value editor
+ */
+ public LeafValueEditor<String> asEditor() {
+ if (editor == null) {
+ editor = TakesValueEditor.of(this);
+ }
+ return editor;
+ }
+
+ /**
+ * Gets the limit for the number of suggestions that should be displayed for
+ * this box. It is up to the current {@link SuggestOracle} to enforce this
+ * limit.
+ *
+ * @return the limit for the number of suggestions
+ */
+ public int getLimit() {
+ return limit;
+ }
+
+ /**
+ * Get the {@link SuggestionDisplay} used to display suggestions.
+ *
+ * @return the {@link SuggestionDisplay}
+ */
+ public SuggestionDisplay getSuggestionDisplay() {
+ return display;
+ }
+
+ /**
+ * Gets the suggest box's
+ * {@link com.google.gwt.user.client.ui.SuggestOracle}.
+ *
+ * @return the {@link SuggestOracle}
+ */
+ public SuggestOracle getSuggestOracle() {
+ return oracle;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.Focusable#getTabIndex()
+ */
+ public int getTabIndex() {
+ return box.getTabIndex();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.HasText#getText()
+ */
+ public String getText() {
+ return box.getText();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.HasValue#getValue()
+ */
+ public String getValue() {
+ return box.getValue();
+ }
+
+ /**
+ * Get the ValueBoxBase associated with this suggest box.
+ *
+ * @return this suggest box's value box
+ */
+ public ValueBoxBase<String> getValueBox() {
+ return box;
+ }
+
+ /**
+ * Returns whether or not the first suggestion will be automatically
+ * selected. This behavior is on by default.
+ *
+ * @return true if the first suggestion will be automatically selected
+ */
+ public boolean isAutoSelectEnabled() {
+ return selectsFirstItem;
+ }
+
+ /**
+ * Gets whether this widget is enabled.
+ *
+ * @return <code>true</code> if the widget is enabled
+ */
+ public boolean isEnabled() {
+ return box.isEnabled();
+ }
+
+ /**
+ * Refreshes the current list of suggestions.
+ */
+ public void refreshSuggestionList() {
+ if (isAttached()) {
+ refreshSuggestions();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.Focusable#setAccessKey(char)
+ */
+ public void setAccessKey(char key) {
+ box.setAccessKey(key);
+ }
+
+ /**
+ * Turns on or off the behavior that automatically selects the first
+ * suggested item. This behavior is on by default.
+ *
+ * @param selectsFirstItem
+ * Whether or not to automatically select the first suggestion
+ */
+ public void setAutoSelectEnabled(boolean selectsFirstItem) {
+ this.selectsFirstItem = selectsFirstItem;
+ }
+
+ /**
+ * Opens the popup and shows the suggestions.
+ */
+ public void openPopup() {
+ showSuggestionList();
+ }
+
+ /**
+ * Closes the popup.
+ */
+ public void closePopup() {
+ display.hideSuggestions();
+ }
+
+ /**
+ * Navigates the selected suggestion to the next one available.
+ */
+ public void navigateToNext() {
+ display.moveSelectionDown();
+ }
+
+ /**
+ * Navigates the selected suggestion to the previous one available.
+ */
+ public void navigateToPrevious() {
+ display.moveSelectionUp();
+ }
+
+ public void selectCurrent() {
+ acceptSuggestion();
+ }
+
+ /**
+ * If true, then the popup hides if the user clicks outside the popup.
+ *
+ * @param autoHide
+ */
+ public void setAutoHide(boolean autoHide) {
+ display.setAutoHide(autoHide);
+ }
+
+ /**
+ * Sets whether this widget is enabled.
+ *
+ * @param enabled
+ * <code>true</code> to enable the widget, <code>false</code> to
+ * disable it
+ */
+ public void setEnabled(boolean enabled) {
+ box.setEnabled(enabled);
+ if (!enabled) {
+ display.hideSuggestions();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.Focusable#setFocus(boolean)
+ */
+ public void setFocus(boolean focused) {
+ box.setFocus(focused);
+ }
+
+ /**
+ * Sets the limit to the number of suggestions the oracle should provide. It
+ * is up to the oracle to enforce this limit.
+ *
+ * @param limit
+ * the limit to the number of suggestions provided
+ */
+ public void setLimit(int limit) {
+ this.limit = limit;
+ }
+
+ /**
+ * Sets the key which need to be pressed to open the popup.<br>
+ * See {@link ShortcutAction.KeyCode}
+ *
+ * @param key
+ * the new key
+ */
+ public void setOpenPopupKey(int key) {
+ openPopupKey = key;
+ }
+
+ /**
+ * Sets the key modifier which need to be pressed to open the popup.<br>
+ * See {@link ShortcutAction.ModifierKey}
+ *
+ * @param modifier
+ * the new modifier
+ */
+ public void setOpenPopupKeyModifier(int modifier) {
+ openPopupModifier = modifier;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.Focusable#setTabIndex(int)
+ */
+ public void setTabIndex(int index) {
+ box.setTabIndex(index);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.HasText#setText(java.lang.String)
+ */
+ public void setText(String text) {
+ box.setText(text);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.HasValue#setValue(java.lang.Object)
+ */
+ public void setValue(String newValue) {
+ box.setValue(newValue);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.user.client.ui.HasValue#setValue(java.lang.Object,
+ * boolean)
+ */
+ public void setValue(String value, boolean fireEvents) {
+ box.setValue(value, fireEvents);
+ }
+
+ /**
+ * Show the current list of suggestions.
+ */
+ public void showSuggestionList() {
+ if (isAttached()) {
+ currentText = null;
+ refreshSuggestions();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.google.gwt.user.client.ui.UIObject#onEnsureDebugId(java.lang.String)
+ */
+ @Override
+ protected void onEnsureDebugId(String baseID) {
+ super.onEnsureDebugId(baseID);
+ display.onEnsureDebugId(baseID);
+ }
+
+ /**
+ * Show suggestions.
+ *
+ * @param query
+ * the query
+ */
+ void showSuggestions(String query) {
+ if (query.length() == 0) {
+ oracle.requestDefaultSuggestions(new Request(null, limit), callback);
+ } else {
+ oracle.requestSuggestions(new Request(query, limit), callback);
+ }
+ }
+
+ protected void acceptSuggestion() {
+ Suggestion suggestion = display.getCurrentSelection();
+ if (suggestion == null) {
+ display.hideSuggestions();
+ } else {
+ setNewSelection(suggestion);
+ }
+ }
+
+ /**
+ * Adds the events to text box.
+ */
+ private void addEventsToTextBox() {
+ class TextBoxEvents implements KeyDownHandler, KeyUpHandler, ValueChangeHandler<String> {
+
+ public void onKeyDown(KeyDownEvent event) {
+ if (event.isAnyModifierKeyDown()) {
+ if (isOpenPopupKey(event) && isOpenPopupModifier(event)) {
+ if (!display.isShowing()) {
+ showSuggestionList();
+ }
+ }
+ } else {
+ switch (event.getNativeKeyCode()) {
+ case KeyCodes.KEY_DOWN:
+ if (display.isShowing()) {
+ display.moveSelectionDown();
+ }
+ break;
+ case KeyCodes.KEY_UP:
+ if (display.isShowing()) {
+ display.moveSelectionUp();
+ }
+ break;
+ case KeyCodes.KEY_ESCAPE:
+ if (display.isShowing()) {
+ display.hideSuggestions();
+ }
+ break;
+ case KeyCodes.KEY_ENTER:
+ case KeyCodes.KEY_TAB:
+ if (display.isShowing()) {
+ acceptSuggestion();
+ }
+ break;
+ }
+ }
+ }
+
+ public void onKeyUp(KeyUpEvent event) {
+ if (!event.isAnyModifierKeyDown()) {
+ // After every user key input, refresh the popup's
+ // suggestions.
+ refreshSuggestions();
+ }
+ }
+
+ public void onValueChange(ValueChangeEvent<String> event) {
+ delegateEvent(OSuggestBox.this, event);
+ }
+ }
+
+ TextBoxEvents events = new TextBoxEvents();
+ box.addKeyDownHandler(events);
+ box.addKeyUpHandler(events);
+ box.addValueChangeHandler(events);
+ }
+
+ public boolean isOpenPopupKey(KeyDownEvent event) {
+ return event.getNativeEvent().getKeyCode() == openPopupKey;
+ }
+
+ public boolean isOpenPopupModifier(KeyDownEvent event) {
+ switch (openPopupModifier) {
+ case KeyCodes.KEY_ALT:
+ return event.isAltKeyDown();
+ case KeyCodes.KEY_CTRL:
+ return event.isControlKeyDown();
+ }
+ return false;
+ }
+
+ /**
+ * Fire suggestion event.
+ *
+ * @param selectedSuggestion
+ * the selected suggestion
+ */
+ private void fireSuggestionEvent(Suggestion selectedSuggestion) {
+ SelectionEvent.fire(this, selectedSuggestion);
+ }
+
+ /**
+ * Refresh suggestions.
+ */
+ private void refreshSuggestions() {
+ // Get the raw text.
+ String text = getText();
+ if (text.equals(currentText)) {
+ return;
+ } else {
+ currentText = text;
+ }
+ showSuggestions(text);
+ }
+
+ /**
+ * Set the new suggestion in the text box.
+ *
+ * @param curSuggestion
+ * the new suggestion
+ */
+ private void setNewSelection(Suggestion curSuggestion) {
+ assert curSuggestion != null : "suggestion cannot be null";
+ currentText = curSuggestion.getReplacementString();
+ setText(currentText);
+ display.hideSuggestions();
+ fireSuggestionEvent(curSuggestion);
+ }
+
+ /**
+ * Sets the suggestion oracle used to create suggestions.
+ *
+ * @param oracle
+ * the oracle
+ */
+ private void setOracle(SuggestOracle oracle) {
+ this.oracle = oracle;
+ }
+
+ /**
+ * Sets the suggestion enabled.
+ *
+ * @param suggestionEnabled
+ * the new suggestion enabled
+ */
+ public void setSuggestionEnabled(boolean suggestionEnabled) {
+ ((ODelegatingOracle) oracle).setSuggestionEnabled(suggestionEnabled);
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestion.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestion.java
new file mode 100644
index 0000000..b289dc2
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestion.java
@@ -0,0 +1,77 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+
+import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Suggestion returned from the server.
+ */
+public class OSuggestion implements Suggestion {
+
+ /** The uuid. */
+ private final String uuid;
+
+ /** The display string. */
+ private final String displayString;
+
+ /**
+ * Instantiates a new o suggestion.
+ *
+ * @param result the result
+ */
+ public OSuggestion(SuggestionResult result) {
+ this(result.uuid, result.displayText);
+ }
+
+ /**
+ * Instantiates a new o suggestion.
+ *
+ * @param uuid the uuid
+ * @param displayString the display string
+ */
+ public OSuggestion(String uuid, String displayString) {
+ super();
+ this.uuid = uuid;
+ this.displayString = displayString;
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.user.client.ui.SuggestOracle.Suggestion#getDisplayString()
+ */
+ @Override
+ public String getDisplayString() {
+ return displayString;
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.user.client.ui.SuggestOracle.Suggestion#getReplacementString()
+ */
+ @Override
+ public String getReplacementString() {
+ return displayString;
+ }
+
+ /**
+ * An unique id which identifies the suggestion.
+ *
+ * @return the uuid
+ */
+ public String getUuid() {
+ return uuid;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldClientRpc.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldClientRpc.java
new file mode 100644
index 0000000..8184a19
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldClientRpc.java
@@ -0,0 +1,63 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.List;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+
+import com.vaadin.shared.communication.ClientRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface SuggestTextFieldClientRpc.
+ */
+public interface SuggestTextFieldClientRpc extends ClientRpc {
+
+ /**
+ * Response from the server with suggestions. Request and response are
+ * linked by the handleId.
+ *
+ * @param handleId
+ * the handle id
+ * @param response
+ * the response
+ */
+ public void respond(String handleId, List<SuggestionResult> response);
+
+ /**
+ * Opens the popup if not already opened and shows the suggested values.
+ */
+ public void openPopup();
+
+ /**
+ * Closes the popup if open. Else it has no effect.
+ */
+ public void closePopup();
+
+ /**
+ * Navigates the selected suggestion to the next one available.
+ */
+ public void navigateToNext();
+
+ /**
+ * Navigates the selected suggestion to the previous one available.
+ */
+ public void navigateToPrevious();
+
+ /**
+ * Selects the current suggestion.
+ */
+ public void selectCurrent();
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java
new file mode 100644
index 0000000..1116584
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java
@@ -0,0 +1,151 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.List;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.SuggestTextField;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
+import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
+import com.google.gwt.user.client.ui.ValueBoxBase;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.ConnectorHierarchyChangeEvent;
+import com.vaadin.client.communication.RpcProxy;
+import com.vaadin.client.communication.StateChangeEvent;
+import com.vaadin.client.ui.AbstractSingleComponentContainerConnector;
+import com.vaadin.shared.ui.Connect;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class SuggestTextFieldConnector.
+ */
+@SuppressWarnings("serial")
+@Connect(SuggestTextField.class)
+public class SuggestTextFieldConnector extends AbstractSingleComponentContainerConnector
+ implements SelectionHandler<Suggestion> {
+
+ /** The rpc. */
+ private SuggestTextFieldServerRpc rpc = RpcProxy.create(SuggestTextFieldServerRpc.class, this);
+
+ /** The query delegate. */
+ private OQueryDelegate queryDelegate;
+
+ /**
+ * Instantiates a new suggest text field connector.
+ */
+ public SuggestTextFieldConnector() {
+ registerRpc(SuggestTextFieldClientRpc.class, new SuggestTextFieldClientRpc() {
+ @Override
+ public void respond(String handle, List<SuggestionResult> response) {
+ queryDelegate.respond(handle, response);
+ }
+
+ @Override
+ public void openPopup() {
+ getWidget().openPopup();
+ }
+
+ @Override
+ public void closePopup() {
+ getWidget().closePopup();
+ }
+
+ @Override
+ public void navigateToNext() {
+ getWidget().navigateToNext();
+ }
+
+ @Override
+ public void navigateToPrevious() {
+ getWidget().navigateToPrevious();
+ }
+
+ @Override
+ public void selectCurrent() {
+ getWidget().selectCurrent();
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.AbstractComponentConnector#getWidget()
+ */
+ @Override
+ public OSuggestBox getWidget() {
+ return (OSuggestBox) super.getWidget();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.AbstractComponentConnector#createWidget()
+ */
+ public OSuggestBox createWidget() {
+ queryDelegate = new OQueryDelegate(rpc);
+ OSuggestBox widget = new OSuggestBox(new ODelegatingOracle(queryDelegate));
+ widget.addSelectionHandler(this);
+ return widget;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.AbstractComponentConnector#getState()
+ */
+ @Override
+ public SuggestTextFieldState getState() {
+ return (SuggestTextFieldState) super.getState();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ui.AbstractComponentConnector#onStateChanged(com.vaadin.client.communication.StateChangeEvent)
+ */
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+
+ getWidget().setLimit(getState().limit);
+ getWidget().setPopupDelay(getState().popupDelay);
+ getWidget().setSuggestionEnabled(getState().suggestionEnabled);
+ getWidget().setAutoHide(getState().autoHide);
+ getWidget().setOpenPopupKey(getState().openPopup_key);
+ getWidget().setOpenPopupKeyModifier(getState().openPopup_modifier);
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.event.logical.shared.SelectionHandler#onSelection(com.google.gwt.event.logical.shared.SelectionEvent)
+ */
+ @Override
+ public void onSelection(SelectionEvent<Suggestion> event) {
+ OSuggestion suggestion = (OSuggestion) event.getSelectedItem();
+ if (suggestion != null) {
+ rpc.selectionChanged(suggestion.getUuid());
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.HasComponentsConnector#updateCaption(com.vaadin.client.ComponentConnector)
+ */
+ @Override
+ public void updateCaption(ComponentConnector connector) {
+
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler#onConnectorHierarchyChange(com.vaadin.client.ConnectorHierarchyChangeEvent)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent connectorHierarchyChangeEvent) {
+ getWidget().initialize((ValueBoxBase<String>) getContent().getWidget());
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java
new file mode 100644
index 0000000..c2ebc8e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java
@@ -0,0 +1,40 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import com.vaadin.shared.communication.ServerRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface SuggestTextFieldServerRpc.
+ */
+public interface SuggestTextFieldServerRpc extends ServerRpc {
+
+ /**
+ * Requests a response with suggestions from the server.
+ *
+ * @param handleId
+ * a unique id for every request to link request/response.
+ * @param filter the filter string.
+ * @param limit the maximum number of suggestions to be contained in the response.
+ */
+ public void requestSuggestions(String handleId, String filter, int limit);
+
+ /**
+ * The suggestion with the given id was selected.
+ *
+ * @param uuid the uuid
+ */
+ public void selectionChanged(String uuid);
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java
new file mode 100644
index 0000000..2bc82bc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java
@@ -0,0 +1,55 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.shared.AbstractComponentState;
+
+/**
+ * The Class SuggestTextFieldState.
+ */
+@SuppressWarnings("serial")
+public class SuggestTextFieldState extends AbstractComponentState {
+
+ /**
+ * The popup delay in milliseconds.
+ */
+ public int popupDelay = 450;
+
+ /**
+ * How many suggestions should be displayed.
+ */
+ public int limit = 10;
+
+ /**
+ * True, if suggestions should be enabled. False otherwise.
+ */
+ public boolean suggestionEnabled = true;
+
+ /**
+ * If true, then the suggestions are hidden, if the user clicks outside the
+ * popup.
+ */
+ public boolean autoHide = true;
+
+ /**
+ * Key to open the popup in combination with the {@link #openPopup_modifier}
+ */
+ public int openPopup_key = ShortcutAction.KeyCode.ARROW_DOWN;
+
+ /**
+ * Key modifier to open the popup in combination with the
+ * {@link #openPopup_key}
+ */
+ public int openPopup_modifier = ShortcutAction.ModifierKey.ALT;
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/public/suggesttext/styles.css b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/public/suggesttext/styles.css
new file mode 100644
index 0000000..74d032f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/public/suggesttext/styles.css
@@ -0,0 +1,18 @@
+.o-SuggestBoxPopup {
+ background-color: white;
+ color: darkgray;
+
+ font-style: normal;
+ font-variant: normal;
+ font-weight: 300;
+ font-stretch: normal;
+ font-size: 16px;
+ line-height: 1.55;
+ font-family: 'Open Sans', sans-serif;
+}
+
+.o-SuggestBoxPopup .item-selected {
+ background-color: darkgray;
+ color: white;
+}
+
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/test/org/eclipse/osbp/vaadin/addons/customcombo/CustomComboTest.java b/org.eclipse.osbp.vaadin.addons.suggesttext/test/org/eclipse/osbp/vaadin/addons/customcombo/CustomComboTest.java
new file mode 100644
index 0000000..e5cae62
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/test/org/eclipse/osbp/vaadin/addons/customcombo/CustomComboTest.java
@@ -0,0 +1,99 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.customcombo;
+
+import com.vaadin.testbench.ScreenshotOnFailureRule;
+import com.vaadin.testbench.TestBenchTestCase;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.LabelElement;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openqa.selenium.firefox.FirefoxDriver;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * This class contains JUnit tests, which are run using Vaadin TestBench 4.
+ *
+ * To run this, first get an evaluation license from
+ * https://vaadin.com/addon/vaadin-testbench and follow the instructions at
+ * https://vaadin.com/directory/help/installing-cval-license to install it.
+ *
+ * Once the license is installed, you can run this class as a JUnit test.
+ */
+public class CustomComboTest extends TestBenchTestCase {
+ @Rule
+ public ScreenshotOnFailureRule screenshotOnFailureRule =
+ new ScreenshotOnFailureRule(this, true);
+
+ @Before
+ public void setUp() throws Exception {
+ setDriver(new FirefoxDriver()); // Firefox
+
+ // To use Chrome, first install chromedriver.exe from
+ // http://chromedriver.storage.googleapis.com/index.html
+ // on your system path (e.g. C:\Windows\System32\)
+ // setDriver(new ChromeDriver()); // Chrome
+
+ // To use Internet Explorer, first install iedriverserver.exe from
+ // http://selenium-release.storage.googleapis.com/index.html?path=2.43/
+ // on your system path (e.g. C:\Windows\System32\)
+ // setDriver(new InternetExplorerDriver()); // IE
+
+ // To test headlessly (without a browser), first install phantomjs.exe
+ // from http://phantomjs.org/download.html on your system path
+ // (e.g. C:\Windows\System32\)
+ // setDriver(new PhantomJSDriver()); // PhantomJS headless browser
+ }
+
+ /**
+ * Opens the URL where the application is deployed.
+ */
+ private void openTestUrl() {
+ getDriver().get("http://localhost:8080/org.eclipse.osbp.vaadin.addons.customcombo");
+ }
+
+ @Test
+ public void testClickButton() throws Exception {
+ openTestUrl();
+
+ // At first there should be no labels
+ assertFalse($(LabelElement.class).exists());
+
+ // Click the button
+ ButtonElement clickMeButton = $(ButtonElement.class).
+ caption("Click Me").first();
+ clickMeButton.click();
+
+ // There should now be one label
+ assertEquals(1, $(LabelElement.class).all().size());
+ // ... with the specified text
+ assertEquals("Thank you for clicking",
+ $(LabelElement.class).first().getText());
+
+ // Click the button again
+ clickMeButton.click();
+
+ // There should now be two labels
+ List<LabelElement> allLabels = $(LabelElement.class).all();
+ assertEquals(2, allLabels.size());
+ // ... and the last label should have the correct text
+ LabelElement lastLabel = allLabels.get(1);
+ assertEquals("Thank you for clicking", lastLabel.getText());
+ }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..68fa3ae
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.osbp.releng.maven</groupId>
+ <artifactId>org.eclipse.osbp.releng.maven.parent.tycho</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath />
+ </parent>
+
+ <groupId>org.eclipse.osbp.vaadin.addons</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.addons.aggregator</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <url>${osbp.site.repository.url}</url>
+ <scm>
+ <url>${osbp.scm.url}</url>
+ <connection>${osbp.scm.connection}</connection>
+ <developerConnection>${osbp.scm.connection.dev}</developerConnection>
+ <tag>HEAD</tag>
+ </scm>
+
+ <properties>
+ <osbp.gitrepo.name>${project.groupId}</osbp.gitrepo.name>
+ </properties>
+
+ <modules>
+ <module>org.eclipse.osbp.vaadin.addons.absolutelayout</module>
+ <module>org.eclipse.osbp.vaadin.addons.designer.overlay</module>
+ <module>org.eclipse.osbp.vaadin.addons.suggesttext</module>
+<!-- <module>org.eclipse.osbp.vaadin.addons.feature</module> -->
+ </modules>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>target-platform-configuration</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <resolver>p2</resolver>
+ <pomDependencies>consider</pomDependencies>
+ <environments>
+ <environment>
+ <os>win32</os>
+ <ws>win32</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86</arch>
+ </environment>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>macosx</os>
+ <ws>cocoa</ws>
+ <arch>x86_64</arch>
+ </environment>
+ </environments>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>