diff --git a/touch/LoginPanel/1.0.1/.sencha/package/build-impl.xml b/touch/LoginPanel/1.0.1/.sencha/package/build-impl.xml
new file mode 100644
index 0000000..0433aa2
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/.sencha/package/build-impl.xml
@@ -0,0 +1,759 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Using Sencha Cmd from ${cmd.dir}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Switch package version from ${package.version} to ${build.version}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+ * This file is generated by Sencha Cmd and should NOT be edited. It redirects
+ * to the most recently built CSS file for the application to allow theme.html
+ * to load properly for image slicing (required to support non-CSS3 browsers
+ * such as IE9 and below).
+ */
+@import '${package.example.css.path}';
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Merging resources from base package ${base.path}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Capture theme image to ${build.dir}/theme-capture.png
+
+ ${build.theme.capture.command}
+
+
+ Slicing theme images to ${build.resources.dir}
+
+ ${build.theme.slice.command}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * This file is generated by Sencha Cmd and should NOT be edited. It is
+ * provided to support globbing requires, custom xtypes, and other
+ * metadata-driven class system features
+ */
+
+
+
+
+
+
+ ${build.compile.command}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/touch/LoginPanel/1.0.1/.sencha/package/build.properties b/touch/LoginPanel/1.0.1/.sencha/package/build.properties
new file mode 100644
index 0000000..59f302d
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/.sencha/package/build.properties
@@ -0,0 +1,114 @@
+# ===========================================
+# This file defines properties used by
+# build-impl.xml, which is the base impl
+# of an applications build process.
+# ===========================================
+
+# ===========================================
+# properties defining various directory
+# locations
+# ===========================================
+build.dir=${package.build.dir}
+build.resources.dir=${build.dir}/resources
+package.resources.dir=${package.dir}/resources
+package.sass.dir=${package.dir}/sass
+package.licenses.dir=${package.dir}/licenses
+
+# ===========================================
+# definitions of various file name patterns
+# used for output artifacts
+# ===========================================
+build.name.prefix=${build.dir}/${package.name}
+build.name.css.prefix=${build.resources.dir}/${package.name}
+build.name.ruby=config.rb
+
+build.debug.suffix=-debug
+build.all.suffix=-all
+build.rtl.suffix=-rtl
+
+build.all.debug.suffix=${build.all.suffix}${build.debug.suffix}
+build.all.rtl.suffix=${build.all.suffix}${build.rtl.suffix}
+build.all.rtl.debug.suffix=${build.all.suffix}${build.rtl.suffix}${build.debug.suffix}
+
+# ===========================================
+# define the output js file names for dev,
+# debug, and compressed (no suffix)
+# ===========================================
+build.all.js=${build.name.prefix}.js
+build.all.debug.js=${build.name.prefix}${build.debug.suffix}.js
+
+# ===========================================
+# output file names for the scss files
+# ===========================================
+build.all.scss=${build.name.prefix}${build.all.debug.suffix}.scss
+build.all.rtl.scss=${build.name.prefix}${build.all.rtl.debug.suffix}.scss
+
+# ===========================================
+# output file names for the css files
+# generated from the scss files by running
+# a compass compilation
+# ===========================================
+build.all.css.debug.prefix=${package.name}${build.all.debug.suffix}
+build.all.css.debug=${build.resources.dir}/${build.all.css.debug.prefix}.css
+build.all.rtl.css.debug.prefix=${package.name}${build.all.rtl.debug.suffix}
+build.all.rtl.css.debug=${build.resources.dir}/${build.all.rtl.css.debug.prefix}.css
+build.all.css.prefix=${package.name}${build.all.suffix}
+build.all.css=${build.resources.dir}/${build.all.css.prefix}.css
+build.all.rtl.css.prefix=${package.name}${build.all.rtl.suffix}
+build.all.rtl.css=${build.resources.dir}/${build.all.rtl.css.prefix}.css
+
+build.all.ruby=${build.dir}/${build.name.ruby}
+
+# ===========================================
+# options to pass to the 'sencha fs slice' command
+# ===========================================
+build.slice.options=
+
+# ===========================================
+# preprocessor options used when generating
+# concatenated js output files
+# ===========================================
+build.compile.js.debug.options=debug:true
+build.compile.js.options=debug:false
+
+# ===========================================
+# compression option used to generate '-all'
+# js output file
+# ===========================================
+build.compile.js.compress=+yui
+
+# ===========================================
+# selector count threshold to use when
+# splitting a single css file into multiple
+# css files (IE selector limit workaround)
+# ===========================================
+build.css.selector.limit=4095
+
+# ===========================================
+# Options for sub-packages
+
+# Set to true/1 to enable build.version inheritance by sub-pacakges
+build.subpkgs.inherit.version=0
+
+# ===========================================
+# theme slicing example page settings
+# ===========================================
+package.example.dir=${package.dir}/sass/example
+package.example.base=${build.all.rtl.css.debug.prefix}
+package.example.css.rel=resources/${package.example.base}.css
+package.example.css=${build.dir}/${package.example.css.rel}
+package.example.scss=${build.dir}/${package.example.base}.scss
+package.example.theme.html=${package.example.dir}/theme.html
+
+bootstrap.base.path=${package.example.dir}
+bootstrap.example.js=${package.example.dir}/bootstrap.js
+
+
+# ===========================================
+# options controlling output packaging
+# operations for output '.pkg' file
+# ===========================================
+pkg.build.dir=${workspace.build.dir}/${package.name}
+pkg.file.name=${package.name}.pkg
+pkg.includes=**/*
+pkg.excludes=package.json
diff --git a/touch/LoginPanel/1.0.1/.sencha/package/codegen.json b/touch/LoginPanel/1.0.1/.sencha/package/codegen.json
new file mode 100644
index 0000000..85b88fe
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/.sencha/package/codegen.json
@@ -0,0 +1,118 @@
+{
+ "sources": {
+ "package.json.tpl.merge": {
+ "12322b2f0769f491000df8ec0e012dd2d78a7eaf": "eJx1zrEKwjAQgOG9TxE6S9HV2VFcFBdxONJrDW1y8XIRSum7m2pTJzMd/3cHGQuVXunAYrlX5ei79pTmqdx8QQa/wiXNK2hGEOLZwJEbLMWQLURrgYfZzg9iUTksXqOA6bE+YNBsvBhy8+6RXKvqX1PUKA+6gxbz5Qs5LNu7altt19+Q9SDXP9oQW5BPzqknDX0qwhGXxPiMhjGkersXU/EGNatRVA\u003d\u003d"
+ },
+ "theme.html.tpl.merge": {
+ "79ec5194c052d6cc313e842c4e2763fa562c7b70": "eJydVE1vEzEQve+vmO4JEF6nhQNKd3MJRYCQqEg4cHS8k9jFay/2JE1U9b/X3l1KWoKIYln74Tdv3vh55PLs/dfp/Mf1FShqzCQrzxjLAGDq2p3XK0XwQr6Ei9H5BYuPNwXM0Eol4JOVRcZYJAw8haKeJCaUpMng5GpL8HkGc4UNwkfhLYZQ8h7r4xokEWWpZfhrrTdVPnWW0BKb71rMQfZ/VU64JZ5kLiFK+4BUfZ9/YO/ySdYnGmqGL07UIIwBnxJ6rMFo+zOAsDUE6XVLoYtLdXfEBMdgU+WBdgaDQqQcKMoPqjKEHJTHZZXjVjStwaJb4kOCPus+40ZsRL+aQ/CyyouCx3kXsW9orgWpex6/WY2L9aq4Cfmk5H388SkXzlEgL9pn/ANukEKYGS3RRz89HrbhCEmPtkb/f73kfiOsXmKgwXjlPMn1CZq9c3Emvyj1EVuIgDyIEPhwHPy32IlWHqXxuIUTReQ6kGsOmtf1XZ8pjeJW1ysklnpfaBtP7e4RS6MRfqXtGM5H7fbyCRKJpMbwdvQX0rqgSbvIip0uSG/wKe426JfG3Y5ho4NemD34PvtT2ZaFro8YxRqQXv8TgVfPinatkJp2ser9zN32+bD/ku/dHwtX76JR3Ssh3QXzACi8aeE\u003d"
+ },
+ "build.properties.merge": {
+ "e82ebd1d5c3c044c6b5563c9a2ea04b78ef272c4": "eJytV8lu5DYQvfsrCDhATxxbngCZwwygYw45zWHyA5S61KJNkQJJeUHQ/56qErW0FqelTF9aol7txVfkrUiv/93cir9L5UWhNIgjFMqAF7WzNbig8LHxcBTZu0Bc1ih9fFBVrZO3St+L11LlpUDZUILIpAdB3xBoCyGNkHWtVS6Dssa3sqQ3B+8TxGxxcSP8duw/h6TMSbxIp2yDC8pBHqx7R5y20b+NFjiaBDWlv/xTy/xZniDp187xswNvG4fxRuAAeOw/3XTSU3C3vgL30i8iab0HYfbB+GWV3bftuW0T2lYVC92llfvHyApELUMAxznl5imsE7YJdROExJoUMg/78k3ak9qh/bfLdA6xEeQ8hueYp4nIRao/FHZN9p7m1hTqlLjspis7ZM0p8U1BSh/4LX6RWvfr+Nz1QRhW8flmBL5Q1fk3aDn3UY5w55H8SPUH0gNqKnut/ZGGZZf2dREwc8TeeBr1kOemOcLLPUPR0j0yylHktsJieuqqT8aK1vqvu5qJonzyfdCj3jrj+qxGK9DFbJD85oTELExSQPnx2MO8vm/XcDlRxYf+T5vxzCLTTrtGy7StoqafmI8+HTSTTmDAyUA042w1yRfNLdcYon+ESm4fJEj+V5qZf3dKiVjaOHt6ueCR1cwu6VjnpnWD52ReoS1OzQq1pusa55aMTx28oOJVtxazdG1+Ps7MdTlZzcaWPIwdGWuigTIZXZN5s4NLbd1O42AFtzf+0z44eDB5KUXhhadxf6C+r5BGd/U8q0iiqV1HMoinPzoORI/5fPBagun2cbtTceTiuQwM72ucCyMu2MeB7YYHJObYoV0c/PYtuAbmyEtMIbWH7WF3Ews1xajboLFGHXWJAx0WDgi+DPX/RtqZTn97b9R2zz1oPidjCI0J2FGoq7SaXccQ2rIRDk/5gQqHBOvxTw8MLZRBcNXooGqOZ2DmT3/9OVjQqlJBvFr3LB0aO+6b6LTvOpUJq0z/+Pz1y/bIv8fupIHjm+wh0gUPsR8QeH9hxzz+Tk/YpRlG2rrwAo4rrUwJTgVpcqAZFJXIZ1ISt1OT1c8nn0RkJ5l+3u4u7nU8ddP+pCLAm8RLGJ3CT7gIXJmtm6bjx6hr7aLxGL/P8HQXTP9zPMzECOFApz2/js7mY9UtrS5Ir90KJgbmlv0Vwq1lv2SaK5CUodLpXI7VDQgcB9YGH5ysWWWC16VyRWwE7Zb5HLpoYsDS8XP3EEHuDc5qTb0Uyag111Iz3avlsD0i4pBgMx/2sBbKDTdnDI1IwKPB8X16dkUjIbLFr9N5Tq4wQplcN0fw6d3d4x2vwFtc6QSePJ4A/wVRGa0C"
+ },
+ "config.rb.tpl.merge": {
+ "33f446bd02c3fd24eb27891582eff6a2e789796b": "eJxLLi2KT8ksUrBVcMvMSdUDMvMSc1M14uPdPH1c4+M1ufJLSwpKS+KLSypzUoGqrPJSi0tSU7gALskTcA\u003d\u003d"
+ },
+ "all.scss.merge": {
+ "da39a3ee5e6b4b0d3255bfef95601890afd80709": "eJwDAAAAAAE\u003d"
+ },
+ "custom.js.merge": {
+ "199e99bbd15c3c0415569425cb21e77c95e9042a": "eJxlj0FOxDAMRfdziq9ZwUjTHIAlYslquIAncdtA4lSxC8PtSdoREmIV6f/4+dmdDjjhbY6KMSZGeycWrmQcQAqCGlWLMmEpUQzXb1xY/Ex4zgFnRMNXTAlSWseovCTybbbUDl6XsJHa1FH3sYX8B03cqqlS4OPQ//2V8CQ7K5fPriEBNjPU17gYjCZE6UnmYbacfj/GsaUNslUIhbVzu5lwq/2qVjIohGixCCVkkjiyWrOFzqWaXw0sViPr0IRYGVQ7yq+55X2HdObg7meo45udt4XnKyk7Je0Z5SWxqyyB6/Cu/Uh3ODj3crNhN28ar/f1D49P/7rLXUd7+QPuPI9g"
+ },
+ "testing.properties.merge": {
+ "e65f969c42eb4f355c850fc58fea852582f20db8": "eJyVkUFywyAQBO9+xVb5oIutH/gX+QCCkbUOAooFOf59FsmqpHKKOFEwOzM0Z7r9f53O9DGx0Mge5DBygFDKMSEX1m0VOBpepLqhsndXnpPvv2Z/oefEdiKdLRNoMAJqdyqMI5lAJiXP1hSOQbbZ5msh0mskmuOvnDHHWY32JjbmDEkxOCqxBai6K5DC4d693RAWzjHMCOVCkmB5ZLhW9EWdINjJtBJv9T7cU0vXsk/2rWwxn9AisHA6AooLcgNhqi8riYXdimAn0P+07vXsCOuD8rNimLWaiDKkmBrK7UOUyR0B2RRQdzXedyp+CMVaUi0rQn3ninMxvurPspjBQ/54jjHvYLbHycGKG5Fm2SIf0u/ut9M3l43NIg\u003d\u003d"
+ },
+ "sencha.cfg.tpl.merge": {
+ "6d1982cce48163a98dc46012d1d0cdfa209fbda6": "eJzFVdFq2zAUfc9XXNzBWmicvg0GgXZlD9vDWsge96LIcqJFljRJTuqN/vuOJNvJmqbbYLASim1dnXPuuVdXZ/R5LUizRpCpKeDZMr5hK0FT8mvTqooaFvg6LRUxriDrjBUudCQ1lbM+vvzqjZ6cTYbXGDr/YTerT3h4nEzORiKPEEHB0G4tE7D0A+lrT4ubxYK4cQ5xRle+TPsqUbNWBdoy1UalgCveP4SCGsG0BwYLSWEtlfBZl2fez7zjdM50NbxvmbvoE+IKH1IwwOLehOeMCXuVJX3QZLDoaGdc5S8Ta2mZFqq8j/+hgFkIMADZc85SxCxFlJ57X2I5WmDIh06Jkbx2piGmuz3lJXkRsimwaKmY3kBFnb/gl75cZsk6hmTAY12daSE6FtC2IduaUj1QiT3PKR1rGAPLUdkc4bmOWUn0jJumYVMvLHMsiIqU9CE2Um1UJZxHiYXbZ4uaykqkinoBpOF702LXUpB4sEpyGVSH0G+tdECMJggo56qt8IrSRt5lK1V1KDVBWRbW81df2qurN++GhUq6x5js3yrHo9kK5yAYPXij1L63YimAFtloJ7ECgSu5RTkYBbaKW4ue/m6AKPpuBztrg0ELSs6U6oAzpgroldAi62EWbbXs8pGEcULz/ogCQkkdPYlBOHdv4cMZEc1m1z0WXT/lP7BqTOtZq8bVp4ZlY/qKpnYqYGvRFzWd0xzsBXN8jRRq42hxu1gAKHuXjul+nHxkW7bgTtowdkLrsa/PGsmhG2CU0UdNCebTxe7b+w8SwDjw/ykDUL+cAQLGDCL5UeuQbKxxITUOTkkkTFmls4GehHjRp3jELsJv/EPADCRpJJwwEv3XT3BDVsWZXsQuXbM8zeMdkqQUZNqAGXQoIp9f0D2rIK0OV0bPlpznRgcmMfDFA2us+sXhc3+R6nV4nxxS9lv8SdYh4EVi3y6n/S4/HscBhu40yoI7SubWKWqH4YmbY1OkeZEv1tDZX4QBEtfkaV0DHXTN/+kfNN1i8uIGus83ukROU7pPteRpRX5P3mISCWV2B8MHNWdbgzwb4VZplhtdoxQBM19iLmqxg3eYJT5un/wEixPeXA\u003d\u003d"
+ }
+ },
+ "targets": {
+ ".sencha/package/testing.properties": {
+ "source": "testing.properties.merge",
+ "version": "e65f969c42eb4f355c850fc58fea852582f20db8",
+ "parameters": {
+ "pkgName": "LoginPanel",
+ "senchadir": ".sencha",
+ "touchRelPath": "../../touch",
+ "extRelPath": "../../${ext.dir}",
+ "pkgType": "code"
+ }
+ },
+ ".sencha/package/build.properties": {
+ "source": "build.properties.merge",
+ "version": "e82ebd1d5c3c044c6b5563c9a2ea04b78ef272c4",
+ "parameters": {
+ "pkgName": "LoginPanel",
+ "senchadir": ".sencha",
+ "touchRelPath": "../../touch",
+ "extRelPath": "../../${ext.dir}",
+ "pkgType": "code"
+ }
+ },
+ "package.json": {
+ "source": "package.json.tpl.merge",
+ "version": "12322b2f0769f491000df8ec0e012dd2d78a7eaf",
+ "parameters": {
+ "pkgName": "LoginPanel",
+ "senchadir": ".sencha",
+ "touchRelPath": "../../touch",
+ "extRelPath": "../../${ext.dir}",
+ "pkgType": "code"
+ }
+ },
+ "sass/example/theme.html": {
+ "source": "theme.html.tpl.merge",
+ "version": "79ec5194c052d6cc313e842c4e2763fa562c7b70",
+ "parameters": {
+ "pkgName": "LoginPanel",
+ "senchadir": ".sencha",
+ "touchRelPath": "../../touch",
+ "extRelPath": "../../${ext.dir}",
+ "pkgType": "code"
+ }
+ },
+ "sass/example/custom.js": {
+ "source": "custom.js.merge",
+ "version": "199e99bbd15c3c0415569425cb21e77c95e9042a",
+ "parameters": {
+ "pkgName": "LoginPanel",
+ "senchadir": ".sencha",
+ "touchRelPath": "../../touch",
+ "extRelPath": "../../${ext.dir}",
+ "pkgType": "code"
+ }
+ },
+ "sass/etc/all.scss": {
+ "source": "all.scss.merge",
+ "version": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
+ "parameters": {
+ "pkgName": "LoginPanel",
+ "senchadir": ".sencha",
+ "touchRelPath": "../../touch",
+ "extRelPath": "../../${ext.dir}",
+ "pkgType": "code"
+ }
+ },
+ "sass/config.rb": {
+ "source": "config.rb.tpl.merge",
+ "version": "33f446bd02c3fd24eb27891582eff6a2e789796b",
+ "parameters": {
+ "pkgName": "LoginPanel",
+ "senchadir": ".sencha",
+ "touchRelPath": "../../touch",
+ "extRelPath": "../../${ext.dir}",
+ "pkgType": "code"
+ }
+ },
+ ".sencha/package/sencha.cfg": {
+ "source": "sencha.cfg.tpl.merge",
+ "version": "6d1982cce48163a98dc46012d1d0cdfa209fbda6",
+ "parameters": {
+ "pkgName": "LoginPanel",
+ "senchadir": ".sencha",
+ "touchRelPath": "../../touch",
+ "extRelPath": "../../${ext.dir}",
+ "pkgType": "code"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/touch/LoginPanel/1.0.1/.sencha/package/plugin.xml b/touch/LoginPanel/1.0.1/.sencha/package/plugin.xml
new file mode 100644
index 0000000..d57eba8
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/.sencha/package/plugin.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
diff --git a/touch/LoginPanel/1.0.1/.sencha/package/sencha.cfg b/touch/LoginPanel/1.0.1/.sencha/package/sencha.cfg
new file mode 100644
index 0000000..3bc1c83
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/.sencha/package/sencha.cfg
@@ -0,0 +1,60 @@
+# The name of the package - should match the "name" property in ./package.json
+#
+package.name=LoginPanel
+
+# The namespace to which this package's SASS corresponds. The default value of
+# "Ext" means that the files in ./sass/src (and ./sass/var) match classes in
+# the Ext" root namespace. In other words, "Ext.panel.Panel" maps to
+# ./sass/src/panel/Panel.scss.
+#
+# To style classes from any namespace, set this to blank. If this is blank,
+# then to style "Ext.panel.Panel" you would put SASS in
+# ./sass/src/Ext/panel/Panel.scss.
+#
+package.sass.namespace=Ext
+
+# This is the comma-separated list of folders where classes reside. These
+# classes must be explicitly required to be included in the build.
+#
+package.classpath=${package.dir}/src
+
+# This is the comma-separated list of folders of overrides. All files in this
+# path will be given a tag of "packageOverrides" which is automatically
+# required in generated apps by the presence of this line in app.js:
+#
+# //@require @packageOverrides
+#
+package.overrides=${package.dir}/overrides
+
+# This is the folder where SASS "src" resides. This is searched for SCSS
+# files that match the JavaScript classes used by the application.
+#
+package.sass.srcpath=${package.dir}/sass/src
+
+# This is the folder where SASS "vars" resides. This is searched for SCSS
+# files that match the JavaScript classes used by the application.
+#
+package.sass.varpath=${package.dir}/sass/var
+
+# This file is automatically imported into the SASS build before "vars".
+#
+package.sass.etcpath=${package.dir}/sass/etc/all.scss
+
+# This is the folder in which to place "sencha packaage build" output.
+#
+package.build.dir=${package.dir}/build
+
+# The folder that contains example application(s) for this package.
+#
+package.examples.dir=${package.dir}/examples
+
+# The folder that contains sub-packages of this package. Only valid for "framework"
+# package type.
+#
+package.subpkgs.dir=${package.dir}/packages
+
+#==============================================================================
+# Custom Properties - Place customizations below this line to avoid merge
+# conflicts with newer versions
+
+package.cmd.version=4.0.0.150
diff --git a/touch/LoginPanel/1.0.1/.sencha/package/sub-builds.xml b/touch/LoginPanel/1.0.1/.sencha/package/sub-builds.xml
new file mode 100644
index 0000000..f84a1c4
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/.sencha/package/sub-builds.xml
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ package
+ upgrade
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Building example in @{example-dir}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Upgrading example in @{example-dir}
+
+
+ app
+ upgrade
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cleaning example in @{example-dir}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/touch/LoginPanel/1.0.1/.sencha/package/testing.properties b/touch/LoginPanel/1.0.1/.sencha/package/testing.properties
new file mode 100644
index 0000000..60749a3
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/.sencha/package/testing.properties
@@ -0,0 +1,17 @@
+# ===========================================
+# This file defines properties used by
+# build-impl.xml, which is the base impl
+# of an applications build process. The
+# properties from this file correspond to the
+# 'testing' build environment, specified
+# by 'sencha app build testing'. These will
+# take precedence over defaults provided by
+# build.properties.
+# ===========================================
+
+# ===========================================
+# compression option used to generate '-all'
+# js output file. this value disables
+# compression for testing builds
+# ===========================================
+build.compile.js.compress=
diff --git a/touch/LoginPanel/1.0.1/Readme.md b/touch/LoginPanel/1.0.1/Readme.md
new file mode 100644
index 0000000..dd72638
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/Readme.md
@@ -0,0 +1,2 @@
+# CoverFlow - Read Me
+
diff --git a/touch/LoginPanel/1.0.1/architect/LoginPanel.js b/touch/LoginPanel/1.0.1/architect/LoginPanel.js
new file mode 100644
index 0000000..cd5254d
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/architect/LoginPanel.js
@@ -0,0 +1,223 @@
+{
+ "className": "sencha.login.LoginPanel",
+ "classAlias": "widget.loginpanel",
+ "inherits": "tabpanel",
+ "autoName": "MyLoginPanel",
+ "helpText": "Login Panel",
+ "noSetup": true,
+
+ "toolbox": {
+ "name": "Login Panel",
+ "category": "Containers",
+ "groups": ["Containers"]
+ },
+
+ "events": [{
+ "name": "register",
+ "params": [
+ {
+ "name": "loginpanel",
+ "type": "sencha.login.LoginPanel",
+ "optional": false
+ },
+ {
+ "name": "values",
+ "type": "Object",
+ "optional": false
+ }
+ ]
+ },{
+ "name": "login",
+ "params": [
+ {
+ "name": "loginpanel",
+ "type": "sencha.login.LoginPanel",
+ "optional": false
+ },
+ {
+ "name": "values",
+ "type": "Object",
+ "optional": false
+ }
+ ]
+ }],
+
+ "items": [{
+ "type": "tabbar",
+ "configs": {
+ "docked": "bottom"
+ }
+ },{
+ "type": "carousel",
+ "startCollapsed": true,
+ "noSetup": true,
+ "configs": {
+ "title": "About",
+ "designer|displayName": "About"
+ },
+ "items": [{
+ "type": "container",
+ "items": [{
+ "type": "label",
+ "configs": {
+ "centered": true,
+ "html": "About 1"
+ }
+ }]
+ },{
+ "type": "container",
+ "items": [{
+ "type": "label",
+ "configs": {
+ "centered": true,
+ "html": "About 2"
+ }
+ }]
+ },{
+ "type": "container",
+ "items": [{
+ "type": "label",
+ "configs": {
+ "centered": true,
+ "html": "About 3"
+ }
+ }]
+ }]
+ },{
+ "type": "formpanel",
+ "startCollapsed": true,
+ "configs": {
+ "title": "Register",
+ "iconCls": "user",
+ "itemId": "register",
+ "designer|displayName": "Register"
+ },
+ "items": [{
+ "type": "fieldset",
+ "noSetup": true,
+ "configs": {
+ "margin": 5,
+ "title": "Required",
+ "itemId": "required"
+ },
+ "items": [{
+ "type": "emailfield",
+ "configs": {
+ "name": "email",
+ "label": "Email",
+ "labelWidth": 100,
+ "placeHolder": "email@example.com"
+ }
+ },{
+ "type": "passwordfield",
+ "configs": {
+ "name": "password",
+ "label": "Password",
+ "labelWidth": 100
+ }
+ },{
+ "type": "passwordfield",
+ "configs": {
+ "name": "confirm",
+ "label": "Confirm",
+ "labelWidth": 100
+ }
+ }]
+ },{
+ "type": "fieldset",
+ "noSetup": true,
+ "configs": {
+ "margin": "-5 5 0 5",
+ "title": "Other Information",
+ "itemId": "other"
+ },
+ "items": [{
+ "type": "textfield",
+ "configs": {
+ "name": "name",
+ "label": "Name",
+ "labelWidth": 100
+ }
+ },{
+ "type": "textfield",
+ "configs": {
+ "name": "address",
+ "label": "Address",
+ "labelWidth": 100
+ }
+ }]
+ },{
+ "type": "button",
+ "configs": {
+ "itemId": "registerBtn",
+ "margin": 20,
+ "ui": "confirm",
+ "text": "Register"
+ },
+ "items": [{
+ "type": "basiceventbinding",
+ "configs": {
+ "fn": "onRegisterButtonTap",
+ "name": "tap",
+ "implHandler": "var panel = button.up('formpanel'),\n\tvalues = panel.getValues();\n\npanel.parent.fireEvent('register', panel, values);"
+ }
+ }]
+ }]
+ },{
+ "type": "formpanel",
+ "startCollapsed": true,
+ "configs": {
+ "layout": "card",
+ "title": "Log in",
+ "iconCls": "action",
+ "itemId": "login",
+ "designer|displayName": "Login"
+ },
+ "items": [{
+ "type": "container",
+ "configs": {
+ "layout": "vbox",
+ "container|pack": "center"
+ },
+ "items": [{
+ "type": "fieldset",
+ "noSetup": true,
+ "configs": {
+ "margin": 5
+ },
+ "items": [{
+ "type": "emailfield",
+ "configs": {
+ "name": "email",
+ "label": "Email",
+ "labelWidth": 100,
+ "placeHolder": "email@example.com"
+ }
+ },{
+ "type": "passwordfield",
+ "configs": {
+ "name": "password",
+ "label": "Password",
+ "labelWidth": 100
+ }
+ }]
+ },{
+ "type": "button",
+ "configs": {
+ "itemId": "loginBtn",
+ "margin": 20,
+ "ui": "confirm",
+ "text": "Log in"
+ },
+ "items": [{
+ "type": "basiceventbinding",
+ "configs": {
+ "fn": "onLoginButtonTap",
+ "name": "tap",
+ "implHandler": "var panel = button.up('formpanel'),\n\tvalues = panel.getValues();\n\npanel.parent.fireEvent('login', panel, values);"
+ }
+ }]
+ }]
+ }]
+ }]
+}
diff --git a/touch/LoginPanel/1.0.1/build.xml b/touch/LoginPanel/1.0.1/build.xml
new file mode 100644
index 0000000..d90ad87
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/build.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
diff --git a/touch/LoginPanel/1.0.1/docs/package.png b/touch/LoginPanel/1.0.1/docs/package.png
new file mode 100644
index 0000000..622a18c
Binary files /dev/null and b/touch/LoginPanel/1.0.1/docs/package.png differ
diff --git a/touch/LoginPanel/1.0.1/docs/screenshots/screenshot-1.png b/touch/LoginPanel/1.0.1/docs/screenshots/screenshot-1.png
new file mode 100644
index 0000000..622a18c
Binary files /dev/null and b/touch/LoginPanel/1.0.1/docs/screenshots/screenshot-1.png differ
diff --git a/touch/LoginPanel/1.0.1/examples/Readme.md b/touch/LoginPanel/1.0.1/examples/Readme.md
new file mode 100644
index 0000000..120bccb
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/examples/Readme.md
@@ -0,0 +1,38 @@
+# LoginPanel/examples
+
+This folder contains example applications demonstrating this package. Each of
+these applications will be built as part of the package build:
+
+ cd /path/to/package
+ sencha package build
+
+As applications, they can also be built individually:
+
+ cd /path/to/package/examples/example-app
+ sencha app build
+
+Or you can build all examples as a group:
+
+ cd /path/to/package
+ sencha ant examples
+
+The ideal location for the example builds to reside is the `"./build"` folder:
+
+ /path/to/package/
+ src/
+ resources/
+ ...
+ examples/
+ example-app/
+ other-example/
+ ...
+ build/
+ resources/
+ examples/
+ example-app/
+ other-example/
+
+This can be specified in the `".sencha/app/build.properties"` file for the
+example applications:
+
+ build.dir=$
\ No newline at end of file
diff --git a/touch/LoginPanel/1.0.1/licenses/Readme.md b/touch/LoginPanel/1.0.1/licenses/Readme.md
new file mode 100644
index 0000000..be01c51
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/licenses/Readme.md
@@ -0,0 +1,3 @@
+# CoverFlow/licenses
+
+This folder contains the supported licenses for third-party use.
diff --git a/touch/LoginPanel/1.0.1/overrides/Readme.md b/touch/LoginPanel/1.0.1/overrides/Readme.md
new file mode 100644
index 0000000..b6541f0
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/overrides/Readme.md
@@ -0,0 +1,3 @@
+# CoverFlow/overrides
+
+This folder contains overrides which will automatically be required by package users.
diff --git a/touch/LoginPanel/1.0.1/package.json b/touch/LoginPanel/1.0.1/package.json
new file mode 100644
index 0000000..58fd7cc
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "LoginPanel",
+ "type": "code",
+ "creator": "anonymous",
+ "summary": "Login Panel Extension",
+ "detailedDescription": "This extension allows easy creation of a commonly used login panel widget",
+ "version": "1.0.1",
+ "compatVersion": "1.0.0",
+ "format": "1",
+ "architect": {
+ "compatFrameworks": [
+ "touch20",
+ "touch21",
+ "touch22",
+ "touch23"
+ ],
+ "classes": [{
+ "className": "sencha.login.LoginPanel",
+ "definition": "LoginPanel.js",
+ "js": [
+ "loginpanel.js"
+ ],
+ "css": [
+ "loginpanel.css"
+ ]
+ }]
+ },
+ "local": true,
+ "requires": []
+}
diff --git a/touch/LoginPanel/1.0.1/resources/Readme.md b/touch/LoginPanel/1.0.1/resources/Readme.md
new file mode 100644
index 0000000..d64efcd
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/resources/Readme.md
@@ -0,0 +1,3 @@
+# CoverFlow/resources
+
+This folder contains static resources (typically an `"images"` folder as well).
diff --git a/touch/LoginPanel/1.0.1/resources/css/loginpanel.css b/touch/LoginPanel/1.0.1/resources/css/loginpanel.css
new file mode 100644
index 0000000..e69de29
diff --git a/touch/LoginPanel/1.0.1/sass/Readme.md b/touch/LoginPanel/1.0.1/sass/Readme.md
new file mode 100644
index 0000000..d1e4b5c
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/sass/Readme.md
@@ -0,0 +1,7 @@
+# CoverFlow/sass
+
+This folder contains SASS files of various kinds, organized in sub-folders:
+
+ CoverFlow/sass/etc
+ CoverFlow/sass/src
+ CoverFlow/sass/var
diff --git a/touch/LoginPanel/1.0.1/sass/config.rb b/touch/LoginPanel/1.0.1/sass/config.rb
new file mode 100644
index 0000000..2c32c0a
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/sass/config.rb
@@ -0,0 +1,2 @@
+cur_dir = File.dirname(__FILE__)
+output_style = :nested
diff --git a/touch/LoginPanel/1.0.1/sass/etc/Readme.md b/touch/LoginPanel/1.0.1/sass/etc/Readme.md
new file mode 100644
index 0000000..8f05f48
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/sass/etc/Readme.md
@@ -0,0 +1,4 @@
+# CoverFlow/sass/etc
+
+This folder contains miscellaneous SASS files. Unlike `"CoverFlow/sass/etc"`, these files
+need to be used explicitly.
diff --git a/touch/LoginPanel/1.0.1/sass/etc/all.scss b/touch/LoginPanel/1.0.1/sass/etc/all.scss
new file mode 100644
index 0000000..e69de29
diff --git a/touch/LoginPanel/1.0.1/sass/example/custom.js b/touch/LoginPanel/1.0.1/sass/example/custom.js
new file mode 100644
index 0000000..4b38faf
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/sass/example/custom.js
@@ -0,0 +1,12 @@
+/*
+ * This file is generated as a starting point by Sencha Cmd - it will not be replaced or
+ * updated by "sencha package upgrade".
+ *
+ * This file can be removed and the script tag in theme.html removed if this theme does
+ * not need custom additional manifest or shortcut entries. These are documented in
+ * ./packages/ext-theme-base/sass/example/render.js.
+ */
+
+//Ext.theme.addManifest();
+
+//Ext.theme.addShortcuts();
diff --git a/touch/LoginPanel/1.0.1/sass/example/render.js b/touch/LoginPanel/1.0.1/sass/example/render.js
new file mode 100644
index 0000000..e65f4e8
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/sass/example/render.js
@@ -0,0 +1,423 @@
+/*
+ * This file is generated by Sencha Cmd and should NOT be edited. It will be replaced
+ * during an upgrade.
+ */
+
+Ext.require([
+ 'Ext.layout.Context',
+]);
+
+Ext.theme = {
+ /**
+ * The array of all component manifests. These objects have the following set of
+ * properties recognized by the slicer:
+ * @private
+ */
+ _manifest: [],
+
+ /**
+ * The collection of shortcuts for a given alias (e.g., 'widget.panel'). This is an
+ * object keyed by alias whose values are arrays of shortcut definitions.
+ * @private
+ */
+ _shortcuts: {},
+
+ doRequire : function(xtype) {
+ if(xtype.indexOf("widget.") != 0) {
+ xtype = "widget." + xtype;
+ }
+ Ext.require([xtype]);
+ },
+
+ /**
+ * Adds one ore more component entries to the theme manifest. These entries will be
+ * instantiated by the `Ext.theme.render` method when the page is ready.
+ *
+ * Usage:
+ *
+ * Ext.theme.addManifest({
+ * xtype: 'widget.menu',
+ * folder: 'menu',
+ * delegate: '.x-menu-item-link',
+ * filename: 'menu-item-active',
+ * config: {
+ * floating: false,
+ * width: 200,
+ * items: [{
+ * text: 'test',
+ * cls: 'x-menu-item-active'
+ * }]
+ * }
+ * },{
+ * //...
+ * });
+ *
+ * @param manifest {Object} An object with type of component, slicing information and
+ * component configuration. If this parameter is an array, each element is treated as
+ * a manifest entry. Otherwise, each argument passed is treated as a manifest entry.
+ *
+ * @param manifest.xtype {String} The xtype ('grid') or alias ('widget.grid'). This
+ * is used to specify the type of component to create as well as a potential key to
+ * any `shortcuts` defined for the xtype.
+ *
+ * @param manifest.config {Object} The component configuration object. The properties
+ * of this depend on the `xtype` of the component.
+ *
+ * @param [manifest.delegate] {String} The DOM query to use to select the element to
+ * slice. The default is to slice the primary element of the component.
+ *
+ * @param [manifest.parentCls] An optional CSS class to add to the parent of the
+ * component.
+ *
+ * @param [manifest.setup] {Function} An optional function to be called to initialize
+ * the component.
+ * @param manifest.setup.component {Ext.Component} The component instance
+ * @param manifest.setup.container {Element} The component's container.
+ *
+ * @param [manifest.folder] {String} The folder in to which to produce image slices.
+ * Only applies to Ext JS 4.1 (removed in 4.2).
+ *
+ * @param [manifest.filename] {String} The base filename for slices.
+ * Only applies to Ext JS 4.1 (removed in 4.2).
+ *
+ * @param [manifest.reverse] {Boolean} True to position the slices for linear gradient
+ * background at then opposite "end" (right or bottom) and apply the stretch to the
+ * area before it (left or top). Only applies to Ext JS 4.1 (removed in 4.2).
+ */
+ addManifest: function (manifest) {
+ var all = Ext.theme._manifest;
+ var add = Ext.isArray(manifest) ? manifest : arguments;
+
+ if(manifest.xtype) {
+ Ext.theme.doRequire(manifest.xtype);
+ }
+
+ for (var i = 0, n = add.length; i < n; ++i) {
+ all.push(add[i]);
+ }
+ },
+
+ /**
+ * Adds one or more shortcuts to the rendering process. A `shortcut` is an object that
+ * looks the same as a `manifest` entry. These are combined by copying the properties
+ * from the shortcut over those of the manifest entry. In basic terms:
+ *
+ * var config = Ext.apply(Ext.apply({}, manfiest.config), shortcut.config);
+ * var entry = Ext.apply(Ext.apply({}, manfiest), shortcut);
+ * entry.config = config;
+ *
+ * This is not exactly the process, but the idea is the same. The difference is that
+ * the `ui` of the manifest entry is used to replace any `"{ui}"` substrings found in
+ * any string properties of the shortcut or its `config` object.
+ *
+ * Usage:
+ *
+ * Ext.theme.addShortcuts({
+ * 'widget.foo': [{
+ * config: {
+ * }
+ * },{
+ * config: {
+ * }
+ * }],
+ *
+ * 'widget.bar': [ ... ]
+ * });
+ */
+ addShortcuts: function (shortcuts) {
+ var all = Ext.theme._shortcuts;
+
+ for (var key in shortcuts) {
+
+ var add = shortcuts[key];
+ var xtype = Ext.theme.addWidget(key);
+ var existing = all[xtype];
+
+ Ext.theme.doRequire(xtype);
+ for(var i=0; i < add.length; i++) {
+ var config = add[i];
+ if(config.xtype) {
+ Ext.theme.doRequire(config.xtype);
+ }
+ }
+
+ if (!existing) {
+ all[xtype] = existing = [];
+ }
+
+ existing.push.apply(existing, add);
+ }
+ },
+
+ /**
+ * This method ensures that a given string has the specified prefix (e.g., "widget.").
+ * @private
+ */
+ addPrefix: function (prefix, s) {
+ if (!s || (s.length > prefix.length && s.substring(0,prefix.length) === prefix)) {
+ return s;
+ }
+ return prefix + s;
+ },
+
+ /**
+ * This method returns the given string with "widget." added to the front if that is
+ * not already present.
+ * @private
+ */
+ addWidget: function (str) {
+ return Ext.theme.addPrefix('widget.', str);
+ },
+
+ /**
+ * This method accepts an manifest entry and a shortcut entry and returns the merged
+ * version.
+ * @private
+ */
+ applyShortcut: function (manifestEntry, shortcut) {
+ var ui = manifestEntry.ui;
+ var config = Ext.theme.copyProps({}, manifestEntry.config);
+ var entry = Ext.theme.copyProps({}, manifestEntry);
+
+ if (ui && !config.ui) {
+ config.ui = ui;
+ }
+ if (shortcut) {
+ var tpl = { ui: ui };
+ Ext.theme.copyProps(entry, shortcut, tpl);
+ Ext.theme.copyProps(config, shortcut.config, tpl);
+ }
+
+ entry.xtype = Ext.theme.addWidget(entry.xtype);
+ entry.config = config; // both guys have "config" so smash merged one on now...
+ return entry;
+ },
+
+ /**
+ * This method copies property from a `src` object to a `dest` object and reaplces
+ * `"{foo}"` fragments of any string properties as defined in the `tpl` object.
+ *
+ * var obj = Ext.theme.copyProps({}, {
+ * foo: 'Hello-{ui}'
+ * }, {
+ * ui: 'World'
+ * });
+ *
+ * console.log('obj.foo: ' + obj.foo); // logs "Hello-World"
+ *
+ * @return {Object} The `dest` object or a new object (if `dest` was null).
+ * @private
+ */
+ copyProps: function (dest, src, tpl) {
+ var out = dest || {};
+ var replacements = [];
+ var token;
+
+ if (src) {
+ if (tpl) {
+ for (token in tpl) {
+ replacements.push({
+ re: new RegExp('\\{' + token + '\\}', 'g'),
+ value: tpl[token]
+ });
+ }
+ }
+
+ for (var key in src) {
+ var val = src[key];
+ if (tpl && typeof val === 'string') {
+ for (var i = 0; i < replacements.length; ++ i) {
+ val = val.replace(replacements[i].re, replacements[i].value);
+ }
+ }
+ out[key] = val;
+ }
+ }
+
+ return out;
+ },
+
+ /**
+ * Renders a component given its manifest and shortcut entries.
+ * @private
+ */
+ renderWidget: function (manifestEntry, shortcut) {
+ var entry = Ext.theme.applyShortcut(manifestEntry, shortcut);
+ var config = entry.config;
+ var widget = Ext.create(entry.xtype, config);
+ var ct = Ext.fly(document.body).createChild({ cls: 'widget-container' });
+
+ Ext.theme.currentWidget = widget;
+
+ if (widget.floating === true) {
+ widget.floating = { shadow: false };
+ }
+ if (widget.floating) {
+ widget.focusOnToFront = false;
+ }
+
+ if (entry.setup) {
+ entry.setup.call(widget, widget, ct);
+ } else {
+ widget.render(ct);
+ if (widget.floating) {
+ widget.showAt(0, 0);
+ ct.setHeight(widget.getHeight());
+ }
+ }
+
+ var el = widget.el;
+ if (entry.delegate) {
+ el = el.down(entry.delegate);
+ }
+
+ el.addCls('x-slicer-target'); // this is what generateSlicerManifest looks for
+
+ if (entry.over) {
+ widget.addOverCls();
+ }
+ if (config.parentCls) {
+ el.parent().addCls(config.parentCls);
+ }
+
+ if (Ext.theme.legacy) {
+ // The 4.1 approach has some interesting extra pieces
+ //
+ var data = {};
+ if (entry.reverse) {
+ data.reverse = true;
+ }
+ if (entry.filename) {
+ data.filename = entry.filename;
+ }
+ if (entry.folder) {
+ data.folder = entry.folder;
+ }
+ if (entry.offsets) {
+ data.offsets = entry.offsets;
+ }
+
+ Ext.theme.setData(el.dom, data);
+ }
+
+ Ext.theme.currentWidget = null;
+ },
+
+ /**
+ * Renders all of the components that have been added to the manifest.
+ * @private
+ */
+ render: function () {
+ var manifest = Ext.theme._manifest;
+ var shortcuts = Ext.theme._shortcuts;
+
+ for (var k = 0, n = manifest ? manifest.length : 0; k < n; ++k) {
+ var manifestEntry = manifest[k];
+ var xtype = Ext.theme.addWidget(manifestEntry.xtype);
+ var widgetShortcuts = xtype ? shortcuts[xtype] : null;
+
+ if (xtype && manifestEntry.ui && widgetShortcuts) {
+ for (var i = 0; i < widgetShortcuts.length; i++) {
+ Ext.theme.renderWidget(manifestEntry, widgetShortcuts[i]);
+ }
+ } else {
+ Ext.theme.renderWidget(manifestEntry);
+ }
+ }
+ },
+
+ /**
+ * Renders all components (see `render`) and notifies the Slicer that things are ready.
+ * @private
+ */
+ run: function () {
+ var extjsVer = Ext.versions.extjs;
+ var globalData = {};
+
+ if (Ext.layout.Context) {
+ Ext.override(Ext.layout.Context, {
+ run: function () {
+ var ok = this.callParent(),
+ widget = Ext.theme.currentWidget;
+ if (!ok && widget) {
+ Ext.Error.raise("Layout run failed: " + widget.id);
+ }
+ return ok;
+ }
+ });
+ }
+
+ // Previous to Ext JS 4.2, themes and their manifests where defined differently.
+ // So pass this along if we are hosting a pre-4.2 theme.
+ //
+ if (extjsVer && extjsVer.isLessThan(new Ext.Version("4.2"))) {
+ globalData.format = "1.0"; // tell the Slicer tool
+ Ext.theme.legacy = true; // not for our own data collection
+
+ // Check for the Cmd3.0/ExtJS4.1 variables:
+ //
+ if (Ext.manifest && Ext.manifest.widgets) {
+ Ext.theme.addManifest(Ext.manifest.widgets);
+ }
+ if (Ext.shortcuts) {
+ Ext.theme.addShortcuts(Ext.shortcuts);
+ }
+ if (Ext.userManifest && Ext.userManifest.widgets) {
+ Ext.theme.addManifest(Ext.userManifest.widgets);
+ }
+ }
+
+ Ext.theme.setData(document.body, globalData);
+
+ Ext.theme.render();
+
+ // This function is defined by slicer.js (the framework-independent piece)
+ Ext.defer(generateSlicerManifest, 1);
+ },
+
+ /**
+ * Sets the `data-slicer` attribute to the JSON-encoded value of the provided data.
+ * @private
+ */
+ setData: function (el, data) {
+ if (data) {
+ var json = Ext.encode(data);
+ if (json !== '{}') {
+ el.setAttribute('data-slicer', json);
+ }
+ }
+ },
+
+ /**
+ * This used to be `loadExtStylesheet`.
+ * @private
+ */
+ loadCss: function (src, callback) {
+ var xhr = new XMLHttpRequest();
+
+ xhr.open('GET', src);
+
+ xhr.onload = function() {
+ var css = xhr.responseText,
+ head = document.getElementsByTagName('head')[0],
+ style = document.createElement('style');
+
+ // There's bugginess in the next gradient syntax in WebKit r84622
+ // This might be fixed in a later WebKit, but for now we're going to
+ // strip it out here since compass generates it.
+ //
+ // TODO: Upgrade to later WebKit revision
+ css = css.replace(/background(-image)?: ?-webkit-linear-gradient(?:.*?);/g, '');
+
+ style.type = 'text/css';
+ style.innerText = css;
+
+ head.appendChild(style);
+ callback();
+ };
+
+ xhr.send(null);
+ }
+};
+
+Ext.onReady(Ext.theme.run, Ext.theme);
diff --git a/touch/LoginPanel/1.0.1/sass/example/theme.html b/touch/LoginPanel/1.0.1/sass/example/theme.html
new file mode 100644
index 0000000..92655ef
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/sass/example/theme.html
@@ -0,0 +1,42 @@
+
+
+
+
+ Ext JS Theme Harness
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/touch/LoginPanel/1.0.1/sass/src/Readme.md b/touch/LoginPanel/1.0.1/sass/src/Readme.md
new file mode 100644
index 0000000..367d262
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/sass/src/Readme.md
@@ -0,0 +1,4 @@
+# CoverFlow/sass/src
+
+This folder contains SASS sources that mimic the component-class hierarchy. These files
+are gathered in to a build of the CSS based on classes that are used by the build.
diff --git a/touch/LoginPanel/1.0.1/sass/var/Readme.md b/touch/LoginPanel/1.0.1/sass/var/Readme.md
new file mode 100644
index 0000000..f17c5d2
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/sass/var/Readme.md
@@ -0,0 +1,3 @@
+# CoverFlow/sass/var
+
+This folder contains variable declaration files named by their component class.
diff --git a/touch/LoginPanel/1.0.1/src/Readme.md b/touch/LoginPanel/1.0.1/src/Readme.md
new file mode 100644
index 0000000..f9278a4
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/src/Readme.md
@@ -0,0 +1,4 @@
+# CoverFlow/src
+
+This folder contains source code that will automatically be added to the classpath when
+the package is used.
diff --git a/touch/LoginPanel/1.0.1/src/loginpanel.js b/touch/LoginPanel/1.0.1/src/loginpanel.js
new file mode 100644
index 0000000..5f0da42
--- /dev/null
+++ b/touch/LoginPanel/1.0.1/src/loginpanel.js
@@ -0,0 +1,4 @@
+Ext.define('sencha.login.LoginPanel', {
+ extend: 'Ext.tab.Panel',
+ alias: 'widget.loginpanel'
+});