├── LICENSE
├── README.md
├── Uray.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ │ └── shameem.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
└── xcuserdata
│ └── shameem.xcuserdatad
│ └── xcschemes
│ └── xcschememanagement.plist
├── Uray
├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── 100.png
│ │ ├── 1024.png
│ │ ├── 114.png
│ │ ├── 120.png
│ │ ├── 128.png
│ │ ├── 144.png
│ │ ├── 152.png
│ │ ├── 16.png
│ │ ├── 167.png
│ │ ├── 180.png
│ │ ├── 20.png
│ │ ├── 256.png
│ │ ├── 29.png
│ │ ├── 32.png
│ │ ├── 40.png
│ │ ├── 50.png
│ │ ├── 512.png
│ │ ├── 57.png
│ │ ├── 58.png
│ │ ├── 60.png
│ │ ├── 64.png
│ │ ├── 72.png
│ │ ├── 76.png
│ │ ├── 80.png
│ │ ├── 87.png
│ │ └── Contents.json
│ ├── Colors
│ │ ├── Btnbg.colorset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── Mnubg.colorset
│ │ │ └── Contents.json
│ │ ├── Mnuhover.colorset
│ │ │ └── Contents.json
│ │ ├── Mnulog.colorset
│ │ │ └── Contents.json
│ │ ├── pcolor1.colorset
│ │ │ └── Contents.json
│ │ ├── pcolor2.colorset
│ │ │ └── Contents.json
│ │ ├── pcolor3.colorset
│ │ │ └── Contents.json
│ │ └── pcolor4.colorset
│ │ │ └── Contents.json
│ ├── Contents.json
│ ├── Icons
│ │ ├── Contents.json
│ │ ├── cart.imageset
│ │ │ ├── Contents.json
│ │ │ └── cart.png
│ │ ├── clipboard.imageset
│ │ │ ├── Contents.json
│ │ │ └── clipboard.png
│ │ ├── heart.imageset
│ │ │ ├── Contents.json
│ │ │ └── heart.png
│ │ ├── home.imageset
│ │ │ ├── Contents.json
│ │ │ └── home.png
│ │ ├── menu.imageset
│ │ │ ├── Contents.json
│ │ │ └── menu.png
│ │ └── person.imageset
│ │ │ ├── Contents.json
│ │ │ └── profile.png
│ ├── Logo
│ │ ├── Contents.json
│ │ └── logo.imageset
│ │ │ ├── Contents.json
│ │ │ └── logo.png
│ ├── Products
│ │ ├── Contents.json
│ │ ├── cat1.imageset
│ │ │ ├── Contents.json
│ │ │ └── cat1.png
│ │ ├── cat2.imageset
│ │ │ ├── Contents.json
│ │ │ └── cat2.png
│ │ ├── cat3.imageset
│ │ │ ├── Contents.json
│ │ │ └── cat3.png
│ │ ├── cat4.imageset
│ │ │ ├── Contents.json
│ │ │ └── cat4.png
│ │ ├── product1.imageset
│ │ │ ├── Contents.json
│ │ │ └── product1.png
│ │ ├── product2.imageset
│ │ │ ├── Contents.json
│ │ │ └── product2.png
│ │ ├── product3.imageset
│ │ │ ├── Contents.json
│ │ │ └── product3.png
│ │ ├── product4.imageset
│ │ │ ├── Contents.json
│ │ │ └── product4.png
│ │ ├── product5.imageset
│ │ │ ├── Contents.json
│ │ │ └── product5.png
│ │ ├── product6.imageset
│ │ │ ├── Contents.json
│ │ │ └── product6.png
│ │ ├── product7.imageset
│ │ │ ├── Contents.json
│ │ │ └── product7.png
│ │ └── product8.imageset
│ │ │ ├── Contents.json
│ │ │ └── product8.png
│ ├── Sliders
│ │ ├── Contents.json
│ │ ├── slider1.imageset
│ │ │ ├── Contents.json
│ │ │ └── slider1.png
│ │ ├── slider2.imageset
│ │ │ ├── Contents.json
│ │ │ └── slider2.png
│ │ ├── slider3.imageset
│ │ │ ├── Contents.json
│ │ │ └── slider3.png
│ │ └── slider4.imageset
│ │ │ ├── Contents.json
│ │ │ └── slider4.png
│ └── profile.imageset
│ │ ├── Contents.json
│ │ └── profile.jpeg
├── ContentView.swift
├── Model
│ ├── Product.swift
│ └── Slider.swift
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── UrayApp.swift
├── View
│ ├── BaseView.swift
│ ├── CustomCurveShape.swift
│ ├── DetailView.swift
│ ├── Home.swift
│ └── HomeSlider.swift
└── ViewModel
│ └── BaseViewModel.swift
└── row
├── preview-1.png
├── preview-2.png
├── preview-3.png
└── preview-4.png
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Uray - eCommerce App UI
2 |
3 | Stylish eCommerce iOS App UI with Hero Animations using SwiftUI 3.0.
4 |
5 |
6 | [](https://opensource.org/licenses/Apache-2.0)
7 | [](https://github.com/shameemreza/uray/blob/main/LICENSE)
8 |
9 |
10 | ## Video Preview
11 |
12 | [](https://youtu.be/KZ2Fa-5TnZY "eCommerce App UI")
13 |
14 | ## Screenshots
15 |
16 |
17 |
18 |
19 |
20 |
21 | ## Features
22 |
23 | * Hero Animations
24 | * SwiftUI Complex UI
25 | * SwiftUI Matched Geometry Effect
26 | * SwiftUI Custom Tab Bar
27 | * SwiftUI Curved Tab Bar
28 | * SwiftUI LazyGrids
29 | * SwiftUI Animations
30 | * Snap Carousel Slider
31 | * SwiftUI Drag Gesture
32 | * SwiftUI Geometry Reader
33 | * SwiftUI Custom Paging Control
34 | * SwiftUI Custom Segmented Control
35 |
36 | Resources:
37 |
38 | * [Snap Carousel Slider by Balaji Venkatesh](https://www.youtube.com/watch?v=4Gw5lDXJ04g)
39 | * [Hero Animations by Balaji Venkatesh](https://www.youtube.com/watch?v=HYYA0wGaWLo)
40 |
41 |
42 | ## License
43 |
44 | ```
45 | Copyright 2022 Shameem Reza
46 |
47 | Licensed under the Apache License, Version 2.0 (the "License");
48 | you may not use this file except in compliance with the License.
49 | You may obtain a copy of the License at
50 |
51 | http://www.apache.org/licenses/LICENSE-2.0
52 |
53 | Unless required by applicable law or agreed to in writing, software
54 | distributed under the License is distributed on an "AS IS" BASIS,
55 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
56 | See the License for the specific language governing permissions and
57 | limitations under the License.
58 | ```
59 |
--------------------------------------------------------------------------------
/Uray.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 55;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | BFF4A7D127DB7DA500446A1F /* UrayApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7D027DB7DA500446A1F /* UrayApp.swift */; };
11 | BFF4A7D327DB7DA500446A1F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7D227DB7DA500446A1F /* ContentView.swift */; };
12 | BFF4A7D527DB7DA700446A1F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BFF4A7D427DB7DA700446A1F /* Assets.xcassets */; };
13 | BFF4A7D827DB7DA700446A1F /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BFF4A7D727DB7DA700446A1F /* Preview Assets.xcassets */; };
14 | BFF4A7E227DB8A7F00446A1F /* BaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7E127DB8A7F00446A1F /* BaseView.swift */; };
15 | BFF4A7E427DB8ADF00446A1F /* BaseViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7E327DB8ADF00446A1F /* BaseViewModel.swift */; };
16 | BFF4A7E627DB92B300446A1F /* CustomCurveShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7E527DB92B300446A1F /* CustomCurveShape.swift */; };
17 | BFF4A7E827DB968C00446A1F /* Home.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7E727DB968C00446A1F /* Home.swift */; };
18 | BFF4A7EA27DBB37C00446A1F /* Product.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7E927DBB37C00446A1F /* Product.swift */; };
19 | BFF4A7EC27DBC1AE00446A1F /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7EB27DBC1AE00446A1F /* DetailView.swift */; };
20 | BFF4A7EE27DBDD5500446A1F /* HomeSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7ED27DBDD5500446A1F /* HomeSlider.swift */; };
21 | BFF4A7F027DBE09400446A1F /* Slider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4A7EF27DBE09400446A1F /* Slider.swift */; };
22 | /* End PBXBuildFile section */
23 |
24 | /* Begin PBXFileReference section */
25 | BFF4A7CD27DB7DA500446A1F /* Uray.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Uray.app; sourceTree = BUILT_PRODUCTS_DIR; };
26 | BFF4A7D027DB7DA500446A1F /* UrayApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UrayApp.swift; sourceTree = ""; };
27 | BFF4A7D227DB7DA500446A1F /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
28 | BFF4A7D427DB7DA700446A1F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
29 | BFF4A7D727DB7DA700446A1F /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
30 | BFF4A7E127DB8A7F00446A1F /* BaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseView.swift; sourceTree = ""; };
31 | BFF4A7E327DB8ADF00446A1F /* BaseViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseViewModel.swift; sourceTree = ""; };
32 | BFF4A7E527DB92B300446A1F /* CustomCurveShape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomCurveShape.swift; sourceTree = ""; };
33 | BFF4A7E727DB968C00446A1F /* Home.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Home.swift; sourceTree = ""; };
34 | BFF4A7E927DBB37C00446A1F /* Product.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Product.swift; sourceTree = ""; };
35 | BFF4A7EB27DBC1AE00446A1F /* DetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailView.swift; sourceTree = ""; };
36 | BFF4A7ED27DBDD5500446A1F /* HomeSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSlider.swift; sourceTree = ""; };
37 | BFF4A7EF27DBE09400446A1F /* Slider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Slider.swift; sourceTree = ""; };
38 | /* End PBXFileReference section */
39 |
40 | /* Begin PBXFrameworksBuildPhase section */
41 | BFF4A7CA27DB7DA500446A1F /* Frameworks */ = {
42 | isa = PBXFrameworksBuildPhase;
43 | buildActionMask = 2147483647;
44 | files = (
45 | );
46 | runOnlyForDeploymentPostprocessing = 0;
47 | };
48 | /* End PBXFrameworksBuildPhase section */
49 |
50 | /* Begin PBXGroup section */
51 | BFF4A7C427DB7DA500446A1F = {
52 | isa = PBXGroup;
53 | children = (
54 | BFF4A7CF27DB7DA500446A1F /* Uray */,
55 | BFF4A7CE27DB7DA500446A1F /* Products */,
56 | );
57 | sourceTree = "";
58 | };
59 | BFF4A7CE27DB7DA500446A1F /* Products */ = {
60 | isa = PBXGroup;
61 | children = (
62 | BFF4A7CD27DB7DA500446A1F /* Uray.app */,
63 | );
64 | name = Products;
65 | sourceTree = "";
66 | };
67 | BFF4A7CF27DB7DA500446A1F /* Uray */ = {
68 | isa = PBXGroup;
69 | children = (
70 | BFF4A7E027DB89ED00446A1F /* Model */,
71 | BFF4A7DF27DB89DA00446A1F /* ViewModel */,
72 | BFF4A7DE27DB89D100446A1F /* View */,
73 | BFF4A7D027DB7DA500446A1F /* UrayApp.swift */,
74 | BFF4A7D227DB7DA500446A1F /* ContentView.swift */,
75 | BFF4A7D427DB7DA700446A1F /* Assets.xcassets */,
76 | BFF4A7D627DB7DA700446A1F /* Preview Content */,
77 | );
78 | path = Uray;
79 | sourceTree = "";
80 | };
81 | BFF4A7D627DB7DA700446A1F /* Preview Content */ = {
82 | isa = PBXGroup;
83 | children = (
84 | BFF4A7D727DB7DA700446A1F /* Preview Assets.xcassets */,
85 | );
86 | path = "Preview Content";
87 | sourceTree = "";
88 | };
89 | BFF4A7DE27DB89D100446A1F /* View */ = {
90 | isa = PBXGroup;
91 | children = (
92 | BFF4A7E127DB8A7F00446A1F /* BaseView.swift */,
93 | BFF4A7E527DB92B300446A1F /* CustomCurveShape.swift */,
94 | BFF4A7E727DB968C00446A1F /* Home.swift */,
95 | BFF4A7EB27DBC1AE00446A1F /* DetailView.swift */,
96 | BFF4A7ED27DBDD5500446A1F /* HomeSlider.swift */,
97 | );
98 | path = View;
99 | sourceTree = "";
100 | };
101 | BFF4A7DF27DB89DA00446A1F /* ViewModel */ = {
102 | isa = PBXGroup;
103 | children = (
104 | BFF4A7E327DB8ADF00446A1F /* BaseViewModel.swift */,
105 | );
106 | path = ViewModel;
107 | sourceTree = "";
108 | };
109 | BFF4A7E027DB89ED00446A1F /* Model */ = {
110 | isa = PBXGroup;
111 | children = (
112 | BFF4A7E927DBB37C00446A1F /* Product.swift */,
113 | BFF4A7EF27DBE09400446A1F /* Slider.swift */,
114 | );
115 | path = Model;
116 | sourceTree = "";
117 | };
118 | /* End PBXGroup section */
119 |
120 | /* Begin PBXNativeTarget section */
121 | BFF4A7CC27DB7DA500446A1F /* Uray */ = {
122 | isa = PBXNativeTarget;
123 | buildConfigurationList = BFF4A7DB27DB7DA700446A1F /* Build configuration list for PBXNativeTarget "Uray" */;
124 | buildPhases = (
125 | BFF4A7C927DB7DA500446A1F /* Sources */,
126 | BFF4A7CA27DB7DA500446A1F /* Frameworks */,
127 | BFF4A7CB27DB7DA500446A1F /* Resources */,
128 | );
129 | buildRules = (
130 | );
131 | dependencies = (
132 | );
133 | name = Uray;
134 | productName = Uray;
135 | productReference = BFF4A7CD27DB7DA500446A1F /* Uray.app */;
136 | productType = "com.apple.product-type.application";
137 | };
138 | /* End PBXNativeTarget section */
139 |
140 | /* Begin PBXProject section */
141 | BFF4A7C527DB7DA500446A1F /* Project object */ = {
142 | isa = PBXProject;
143 | attributes = {
144 | BuildIndependentTargetsInParallel = 1;
145 | LastSwiftUpdateCheck = 1320;
146 | LastUpgradeCheck = 1320;
147 | TargetAttributes = {
148 | BFF4A7CC27DB7DA500446A1F = {
149 | CreatedOnToolsVersion = 13.2.1;
150 | };
151 | };
152 | };
153 | buildConfigurationList = BFF4A7C827DB7DA500446A1F /* Build configuration list for PBXProject "Uray" */;
154 | compatibilityVersion = "Xcode 13.0";
155 | developmentRegion = en;
156 | hasScannedForEncodings = 0;
157 | knownRegions = (
158 | en,
159 | Base,
160 | );
161 | mainGroup = BFF4A7C427DB7DA500446A1F;
162 | productRefGroup = BFF4A7CE27DB7DA500446A1F /* Products */;
163 | projectDirPath = "";
164 | projectRoot = "";
165 | targets = (
166 | BFF4A7CC27DB7DA500446A1F /* Uray */,
167 | );
168 | };
169 | /* End PBXProject section */
170 |
171 | /* Begin PBXResourcesBuildPhase section */
172 | BFF4A7CB27DB7DA500446A1F /* Resources */ = {
173 | isa = PBXResourcesBuildPhase;
174 | buildActionMask = 2147483647;
175 | files = (
176 | BFF4A7D827DB7DA700446A1F /* Preview Assets.xcassets in Resources */,
177 | BFF4A7D527DB7DA700446A1F /* Assets.xcassets in Resources */,
178 | );
179 | runOnlyForDeploymentPostprocessing = 0;
180 | };
181 | /* End PBXResourcesBuildPhase section */
182 |
183 | /* Begin PBXSourcesBuildPhase section */
184 | BFF4A7C927DB7DA500446A1F /* Sources */ = {
185 | isa = PBXSourcesBuildPhase;
186 | buildActionMask = 2147483647;
187 | files = (
188 | BFF4A7E227DB8A7F00446A1F /* BaseView.swift in Sources */,
189 | BFF4A7EC27DBC1AE00446A1F /* DetailView.swift in Sources */,
190 | BFF4A7E427DB8ADF00446A1F /* BaseViewModel.swift in Sources */,
191 | BFF4A7E627DB92B300446A1F /* CustomCurveShape.swift in Sources */,
192 | BFF4A7F027DBE09400446A1F /* Slider.swift in Sources */,
193 | BFF4A7D327DB7DA500446A1F /* ContentView.swift in Sources */,
194 | BFF4A7EE27DBDD5500446A1F /* HomeSlider.swift in Sources */,
195 | BFF4A7E827DB968C00446A1F /* Home.swift in Sources */,
196 | BFF4A7D127DB7DA500446A1F /* UrayApp.swift in Sources */,
197 | BFF4A7EA27DBB37C00446A1F /* Product.swift in Sources */,
198 | );
199 | runOnlyForDeploymentPostprocessing = 0;
200 | };
201 | /* End PBXSourcesBuildPhase section */
202 |
203 | /* Begin XCBuildConfiguration section */
204 | BFF4A7D927DB7DA700446A1F /* Debug */ = {
205 | isa = XCBuildConfiguration;
206 | buildSettings = {
207 | ALWAYS_SEARCH_USER_PATHS = NO;
208 | CLANG_ANALYZER_NONNULL = YES;
209 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
210 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
211 | CLANG_CXX_LIBRARY = "libc++";
212 | CLANG_ENABLE_MODULES = YES;
213 | CLANG_ENABLE_OBJC_ARC = YES;
214 | CLANG_ENABLE_OBJC_WEAK = YES;
215 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
216 | CLANG_WARN_BOOL_CONVERSION = YES;
217 | CLANG_WARN_COMMA = YES;
218 | CLANG_WARN_CONSTANT_CONVERSION = YES;
219 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
220 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
221 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
222 | CLANG_WARN_EMPTY_BODY = YES;
223 | CLANG_WARN_ENUM_CONVERSION = YES;
224 | CLANG_WARN_INFINITE_RECURSION = YES;
225 | CLANG_WARN_INT_CONVERSION = YES;
226 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
227 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
228 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
229 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
230 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
231 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
232 | CLANG_WARN_STRICT_PROTOTYPES = YES;
233 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
234 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
235 | CLANG_WARN_UNREACHABLE_CODE = YES;
236 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
237 | COPY_PHASE_STRIP = NO;
238 | DEBUG_INFORMATION_FORMAT = dwarf;
239 | ENABLE_STRICT_OBJC_MSGSEND = YES;
240 | ENABLE_TESTABILITY = YES;
241 | GCC_C_LANGUAGE_STANDARD = gnu11;
242 | GCC_DYNAMIC_NO_PIC = NO;
243 | GCC_NO_COMMON_BLOCKS = YES;
244 | GCC_OPTIMIZATION_LEVEL = 0;
245 | GCC_PREPROCESSOR_DEFINITIONS = (
246 | "DEBUG=1",
247 | "$(inherited)",
248 | );
249 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
250 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
251 | GCC_WARN_UNDECLARED_SELECTOR = YES;
252 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
253 | GCC_WARN_UNUSED_FUNCTION = YES;
254 | GCC_WARN_UNUSED_VARIABLE = YES;
255 | IPHONEOS_DEPLOYMENT_TARGET = 15.2;
256 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
257 | MTL_FAST_MATH = YES;
258 | ONLY_ACTIVE_ARCH = YES;
259 | SDKROOT = iphoneos;
260 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
261 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
262 | };
263 | name = Debug;
264 | };
265 | BFF4A7DA27DB7DA700446A1F /* Release */ = {
266 | isa = XCBuildConfiguration;
267 | buildSettings = {
268 | ALWAYS_SEARCH_USER_PATHS = NO;
269 | CLANG_ANALYZER_NONNULL = YES;
270 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
271 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
272 | CLANG_CXX_LIBRARY = "libc++";
273 | CLANG_ENABLE_MODULES = YES;
274 | CLANG_ENABLE_OBJC_ARC = YES;
275 | CLANG_ENABLE_OBJC_WEAK = YES;
276 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
277 | CLANG_WARN_BOOL_CONVERSION = YES;
278 | CLANG_WARN_COMMA = YES;
279 | CLANG_WARN_CONSTANT_CONVERSION = YES;
280 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
281 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
282 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
283 | CLANG_WARN_EMPTY_BODY = YES;
284 | CLANG_WARN_ENUM_CONVERSION = YES;
285 | CLANG_WARN_INFINITE_RECURSION = YES;
286 | CLANG_WARN_INT_CONVERSION = YES;
287 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
288 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
289 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
290 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
291 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
292 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
293 | CLANG_WARN_STRICT_PROTOTYPES = YES;
294 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
295 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
296 | CLANG_WARN_UNREACHABLE_CODE = YES;
297 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
298 | COPY_PHASE_STRIP = NO;
299 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
300 | ENABLE_NS_ASSERTIONS = NO;
301 | ENABLE_STRICT_OBJC_MSGSEND = YES;
302 | GCC_C_LANGUAGE_STANDARD = gnu11;
303 | GCC_NO_COMMON_BLOCKS = YES;
304 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
305 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
306 | GCC_WARN_UNDECLARED_SELECTOR = YES;
307 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
308 | GCC_WARN_UNUSED_FUNCTION = YES;
309 | GCC_WARN_UNUSED_VARIABLE = YES;
310 | IPHONEOS_DEPLOYMENT_TARGET = 15.2;
311 | MTL_ENABLE_DEBUG_INFO = NO;
312 | MTL_FAST_MATH = YES;
313 | SDKROOT = iphoneos;
314 | SWIFT_COMPILATION_MODE = wholemodule;
315 | SWIFT_OPTIMIZATION_LEVEL = "-O";
316 | VALIDATE_PRODUCT = YES;
317 | };
318 | name = Release;
319 | };
320 | BFF4A7DC27DB7DA700446A1F /* Debug */ = {
321 | isa = XCBuildConfiguration;
322 | buildSettings = {
323 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
324 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
325 | CODE_SIGN_STYLE = Automatic;
326 | CURRENT_PROJECT_VERSION = 1;
327 | DEVELOPMENT_ASSET_PATHS = "\"Uray/Preview Content\"";
328 | ENABLE_PREVIEWS = YES;
329 | GENERATE_INFOPLIST_FILE = YES;
330 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
331 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
332 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
333 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
334 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
335 | LD_RUNPATH_SEARCH_PATHS = (
336 | "$(inherited)",
337 | "@executable_path/Frameworks",
338 | );
339 | MARKETING_VERSION = 1.0;
340 | PRODUCT_BUNDLE_IDENTIFIER = com.orixlab.Uray;
341 | PRODUCT_NAME = "$(TARGET_NAME)";
342 | SWIFT_EMIT_LOC_STRINGS = YES;
343 | SWIFT_VERSION = 5.0;
344 | TARGETED_DEVICE_FAMILY = "1,2";
345 | };
346 | name = Debug;
347 | };
348 | BFF4A7DD27DB7DA700446A1F /* Release */ = {
349 | isa = XCBuildConfiguration;
350 | buildSettings = {
351 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
352 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
353 | CODE_SIGN_STYLE = Automatic;
354 | CURRENT_PROJECT_VERSION = 1;
355 | DEVELOPMENT_ASSET_PATHS = "\"Uray/Preview Content\"";
356 | ENABLE_PREVIEWS = YES;
357 | GENERATE_INFOPLIST_FILE = YES;
358 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
359 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
360 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
361 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
362 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
363 | LD_RUNPATH_SEARCH_PATHS = (
364 | "$(inherited)",
365 | "@executable_path/Frameworks",
366 | );
367 | MARKETING_VERSION = 1.0;
368 | PRODUCT_BUNDLE_IDENTIFIER = com.orixlab.Uray;
369 | PRODUCT_NAME = "$(TARGET_NAME)";
370 | SWIFT_EMIT_LOC_STRINGS = YES;
371 | SWIFT_VERSION = 5.0;
372 | TARGETED_DEVICE_FAMILY = "1,2";
373 | };
374 | name = Release;
375 | };
376 | /* End XCBuildConfiguration section */
377 |
378 | /* Begin XCConfigurationList section */
379 | BFF4A7C827DB7DA500446A1F /* Build configuration list for PBXProject "Uray" */ = {
380 | isa = XCConfigurationList;
381 | buildConfigurations = (
382 | BFF4A7D927DB7DA700446A1F /* Debug */,
383 | BFF4A7DA27DB7DA700446A1F /* Release */,
384 | );
385 | defaultConfigurationIsVisible = 0;
386 | defaultConfigurationName = Release;
387 | };
388 | BFF4A7DB27DB7DA700446A1F /* Build configuration list for PBXNativeTarget "Uray" */ = {
389 | isa = XCConfigurationList;
390 | buildConfigurations = (
391 | BFF4A7DC27DB7DA700446A1F /* Debug */,
392 | BFF4A7DD27DB7DA700446A1F /* Release */,
393 | );
394 | defaultConfigurationIsVisible = 0;
395 | defaultConfigurationName = Release;
396 | };
397 | /* End XCConfigurationList section */
398 | };
399 | rootObject = BFF4A7C527DB7DA500446A1F /* Project object */;
400 | }
401 |
--------------------------------------------------------------------------------
/Uray.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Uray.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Uray.xcodeproj/project.xcworkspace/xcuserdata/shameem.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray.xcodeproj/project.xcworkspace/xcuserdata/shameem.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Uray.xcodeproj/xcuserdata/shameem.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Uray.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/100.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/1024.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/114.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/120.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/128.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/144.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/152.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/16.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/167.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/180.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/20.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/256.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/29.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/32.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/40.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/50.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/512.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/57.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/58.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/60.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/64.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/72.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/76.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/80.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/AppIcon.appiconset/87.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"128x128","expected-size":"128","filename":"128.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"256x256","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"128x128","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"256x256","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"512x512","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"16","filename":"16.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"64","filename":"64.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"512x512","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"}]}
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Colors/Btnbg.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0x8F",
9 | "green" : "0x5D",
10 | "red" : "0xFF"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Colors/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Colors/Mnubg.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0xE4",
9 | "green" : "0xE8",
10 | "red" : "0xE8"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Colors/Mnuhover.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0x8F",
9 | "green" : "0x5D",
10 | "red" : "0xFF"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Colors/Mnulog.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0x55",
9 | "green" : "0x5F",
10 | "red" : "0xFE"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Colors/pcolor1.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0xFE",
9 | "green" : "0xE0",
10 | "red" : "0xBD"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Colors/pcolor2.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0xCC",
9 | "green" : "0xAF",
10 | "red" : "0xFF"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Colors/pcolor3.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0x9F",
9 | "green" : "0xEF",
10 | "red" : "0xFF"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Colors/pcolor4.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0xA4",
9 | "green" : "0xFB",
10 | "red" : "0xC1"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/cart.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cart.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/cart.imageset/cart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Icons/cart.imageset/cart.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/clipboard.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "clipboard.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/clipboard.imageset/clipboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Icons/clipboard.imageset/clipboard.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/heart.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "heart.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/heart.imageset/heart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Icons/heart.imageset/heart.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/home.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "home.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/home.imageset/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Icons/home.imageset/home.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/menu.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "menu.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/menu.imageset/menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Icons/menu.imageset/menu.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/person.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "profile.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Icons/person.imageset/profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Icons/person.imageset/profile.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Logo/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Logo/logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "logo.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Logo/logo.imageset/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Logo/logo.imageset/logo.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/cat1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cat1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/cat1.imageset/cat1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/cat1.imageset/cat1.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/cat2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cat2.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/cat2.imageset/cat2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/cat2.imageset/cat2.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/cat3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cat3.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/cat3.imageset/cat3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/cat3.imageset/cat3.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/cat4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cat4.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/cat4.imageset/cat4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/cat4.imageset/cat4.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "product1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product1.imageset/product1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/product1.imageset/product1.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "product2.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product2.imageset/product2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/product2.imageset/product2.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "product3.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product3.imageset/product3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/product3.imageset/product3.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "product4.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product4.imageset/product4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/product4.imageset/product4.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "product5.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product5.imageset/product5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/product5.imageset/product5.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "product6.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product6.imageset/product6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/product6.imageset/product6.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product7.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "product7.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product7.imageset/product7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/product7.imageset/product7.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product8.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "product8.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Products/product8.imageset/product8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Products/product8.imageset/product8.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Sliders/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Sliders/slider1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "slider1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Sliders/slider1.imageset/slider1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Sliders/slider1.imageset/slider1.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Sliders/slider2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "slider2.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Sliders/slider2.imageset/slider2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Sliders/slider2.imageset/slider2.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Sliders/slider3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "slider3.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Sliders/slider3.imageset/slider3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Sliders/slider3.imageset/slider3.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Sliders/slider4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "slider4.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/Sliders/slider4.imageset/slider4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/Sliders/slider4.imageset/slider4.png
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/profile.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "profile.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Uray/Assets.xcassets/profile.imageset/profile.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/Uray/Assets.xcassets/profile.imageset/profile.jpeg
--------------------------------------------------------------------------------
/Uray/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 11/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct ContentView: View {
11 | var body: some View {
12 | BaseView()
13 | }
14 | }
15 |
16 | struct ContentView_Previews: PreviewProvider {
17 | static var previews: some View {
18 | ContentView()
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Uray/Model/Product.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Product.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 11/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct Product: Identifiable {
11 | var id = UUID().uuidString
12 | var productImage: String
13 | var productTitle: String
14 | var productPrice: String
15 | var productColor: Color
16 | var productDescription: String
17 | var isLiked: Bool = false
18 | var productRating: Int
19 | }
20 |
21 | var products = [
22 | Product(productImage: "product1", productTitle: "Attenir Oil", productPrice: "$25.99", productColor: Color("pcolor3"), productDescription: "Attenir Skin Clear Cleanse Oil cleanses makeup, skin stains and impurities on the skin while leaving it supple and firm.", productRating: 4),
23 | Product(productImage: "product2", productTitle: "Attenir Lift", productPrice: "$36.0", productColor: Color("pcolor2"), productDescription: "Dress Lift Day Emulsion is Attenir's anti-ageing regenerating lifting emulsion for daily facial care.", productRating: 5),
24 | Product(productImage: "product3", productTitle: "Recast Care", productPrice: "$52.0", productColor: Color("pcolor1"), productDescription: "Recast vitamin c facial serum is a extremely light weight serum infused with the stable form of vitamin c.", productRating: 3),
25 | Product(productImage: "product4", productTitle: "Hawaiian Tropic", productPrice: "60.0", productColor: Color("pcolor4"), productDescription: "Let the luxurious feel and exotic scents of Hawaiian Tropic Sheer Touch take you to the tropics.", productRating: 4),
26 | ]
27 |
--------------------------------------------------------------------------------
/Uray/Model/Slider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Slider.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 12/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct Slider: Identifiable {
11 | var id = UUID().uuidString
12 | var sliderImage: String
13 | }
14 |
--------------------------------------------------------------------------------
/Uray/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Uray/UrayApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UrayApp.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 11/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct UrayApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | ContentView()
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Uray/View/BaseView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseView.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 11/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct BaseView: View {
11 | @StateObject var baseData = BaseViewModel()
12 |
13 | // MARK: - HIDE TAB BAR
14 | init() {
15 | UITabBar.appearance().isHidden = true
16 | }
17 |
18 | var body: some View {
19 | TabView(selection: $baseData.currentTab) {
20 | Home()
21 | .environmentObject(baseData)
22 | .frame(maxWidth: .infinity, maxHeight: .infinity)
23 | .background(Color.black.opacity(0.04))
24 | .tag(Tab.Home)
25 | Text("heart")
26 | .tag(Tab.Heart)
27 | Text("Clipboard")
28 | .tag(Tab.ClipBoard)
29 | Text("Person")
30 | .tag(Tab.Person)
31 | }
32 | .overlay(
33 | // MARK: - CUSTOM TAB BAR
34 | HStack(spacing: 0) {
35 | // MARK: - TAB BUTTON
36 | TabButton(Tab: .Home)
37 | TabButton(Tab: .Heart)
38 | .offset(x: -10)
39 |
40 | // MARK: CURVED BUTTON
41 | Button {
42 |
43 | } label: {
44 | Image("cart")
45 | .resizable()
46 | .renderingMode(.template)
47 | .aspectRatio(contentMode: .fit)
48 | .frame(width: 26, height: 26)
49 | .offset(x: -1)
50 | .padding(18)
51 | .foregroundColor(Color.white)
52 | .background(Color("Btnbg"))
53 | .clipShape(Circle())
54 | //MAR: - BUTTON SHADOWS
55 | .shadow(color: Color.black.opacity(0.04), radius: 5, x: 5, y: 5)
56 | .shadow(color: Color.black.opacity(0.04), radius: 5, x: -5, y: -5)
57 | }
58 | .offset(y: -30)
59 |
60 | TabButton(Tab: .ClipBoard)
61 | .offset(x: 10)
62 | TabButton(Tab: .Person)
63 | }
64 | .background(
65 | Color.white
66 | .clipShape(CustomCurveShape())
67 | //MARK: - SHADOW
68 | .shadow(color: Color.black.opacity(0.04), radius: 5, x: -5, y: -5)
69 | .ignoresSafeArea(.container, edges: .bottom)
70 | )
71 | //MARK: - HIDE TAB ON DETAIL VIEW
72 | .offset(y: baseData.showDetail ? 200 : 0)
73 |
74 | , alignment: .bottom
75 | )
76 | }
77 | @ViewBuilder
78 | func TabButton(Tab: Tab)-> some View {
79 | Button {
80 | withAnimation{
81 | baseData.currentTab = Tab
82 | }
83 | } label: {
84 | Image(Tab.rawValue)
85 | .resizable()
86 | .renderingMode(.template)
87 | .aspectRatio(contentMode: .fit)
88 | .frame(width: 25, height: 25)
89 | .foregroundColor(baseData.currentTab == Tab ? Color("Btnbg") : Color.gray.opacity(0.5))
90 | .frame(maxWidth: .infinity)
91 | }
92 | }
93 | }
94 |
95 | struct BaseView_Previews: PreviewProvider {
96 | static var previews: some View {
97 | BaseView()
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/Uray/View/CustomCurveShape.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CustomCurveShape.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 11/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct CustomCurveShape: Shape {
11 | func path(in rect: CGRect) -> Path {
12 | return Path{path in
13 | path.move(to: CGPoint(x: 0, y: 0))
14 | path.addLine(to: CGPoint(x: rect.width, y: 0))
15 | path.addLine(to: CGPoint(x: rect.width, y: rect.height))
16 | path.addLine(to: CGPoint(x: 0, y: rect.height))
17 |
18 |
19 | // MARK: = CURVE CENTER
20 | let mid = rect.width / 2
21 |
22 | path.move(to: CGPoint(x: mid - 70, y:0))
23 |
24 | let to1 = CGPoint(x: mid, y: 45)
25 | let control1 = CGPoint(x: mid - 35, y: 0)
26 | let control2 = CGPoint(x: mid - 35, y: 45)
27 |
28 | path.addCurve(to: to1, control1: control1, control2: control2)
29 |
30 | let to2 = CGPoint(x: mid + 70, y: 0)
31 | let control3 = CGPoint(x: mid + 35, y: 45)
32 | let control4 = CGPoint(x: mid + 35, y: 0)
33 |
34 | path.addCurve(to: to2, control1: control3, control2: control4)
35 | }
36 | }
37 | }
38 |
39 | struct CustomCurveShape_Previews: PreviewProvider {
40 | static var previews: some View {
41 | BaseView()
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Uray/View/DetailView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DetailView.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 11/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct DetailView: View {
11 | @EnvironmentObject var baseData: BaseViewModel
12 | //FOR HERO EFFECT
13 | var animation: Namespace.ID
14 |
15 |
16 | @State var size = "2 Grams"
17 | @State var itemColor: Color = .red
18 |
19 | var body: some View {
20 |
21 | //MARK: SAFE CHECK
22 | if let product = baseData.currentProduct, baseData.showDetail {
23 | VStack(spacing: 0) {
24 | //MARK: - APP BAR
25 | HStack {
26 | //MARK: DRAWER MENU
27 | Button {
28 | withAnimation{
29 | baseData.showDetail = false
30 | }
31 | } label: {
32 | Image(systemName: "arrow.left")
33 | .font(.title2)
34 | .foregroundColor(.black)
35 | } // END DRAWER MENU
36 |
37 | Spacer()
38 |
39 | //MARK: SEARCH ICON
40 | Button {
41 |
42 | } label: {
43 | Image(systemName: "suit.heart.fill")
44 | .foregroundColor(.white)
45 | .padding(8)
46 | .background(Color.red, in: Circle())
47 | } // END SEARCH ICON
48 | }
49 | .foregroundColor(.black)
50 | .overlay(
51 | Image("logo")
52 | .resizable()
53 | .frame(width: 74, height: 34)
54 | .padding(.horizontal)
55 | .padding(.bottom)
56 | )
57 | .padding()
58 | // END APP BAR
59 |
60 | //MARK: - PRODUCT IMAGE
61 | Image(product.productImage)
62 | .resizable()
63 | .aspectRatio(contentMode: .fit)
64 | .frame(width: 220, height: 220)
65 | .matchedGeometryEffect(id: product.productImage, in: animation)
66 | .rotationEffect(.init(degrees: -20))
67 | .background(
68 | ZStack {
69 | Circle()
70 | .fill(product.productColor)
71 | .padding()
72 | Circle()
73 | .fill(Color.white.opacity(0.5))
74 | .padding(60)
75 |
76 | }
77 | )
78 | .frame(height: getScreenBound().height / 3)
79 |
80 | //MARK: - PRODUCT DETAILS
81 | VStack(alignment: .leading, spacing: 15) {
82 | HStack {
83 | Text(product.productTitle)
84 | .font(.title.bold())
85 |
86 | Spacer(minLength: 10)
87 |
88 | Image(systemName: "star.fill")
89 | .foregroundColor(.yellow)
90 |
91 | Text("(\(product.productRating))")
92 | .foregroundColor(.gray)
93 |
94 | }
95 | Text(product.productDescription)
96 | .font(.callout)
97 | .lineSpacing(10)
98 |
99 | //MARK: PRODUCT SIZE
100 | HStack(spacing: 0) {
101 | Text("Size: ")
102 | .font(.caption.bold())
103 | .foregroundColor(.gray)
104 | .padding(.trailing)
105 |
106 | ForEach(["1 Grams", "2 Grams", "3 Grams"], id: \.self){size in
107 | Button {
108 | self.size = size
109 |
110 | } label: {
111 | Text(size)
112 | .font(.callout)
113 | .foregroundColor(.black)
114 | .padding(.vertical, 8)
115 | .padding(.horizontal)
116 | .background(
117 | RoundedRectangle(cornerRadius: 8)
118 | .fill(Color.blue)
119 | .opacity(self.size == size ? 0.3 : 0)
120 | )
121 | }
122 | }
123 | } // END SIZE
124 | .padding(.vertical)
125 |
126 | //MARK: PRODUCT COLOR
127 | HStack(spacing: 15) {
128 | let colors: [Color] = [.red, .yellow,.purple,.green]
129 | Text("Colors: ")
130 | .font(.caption.bold())
131 | .foregroundColor(.gray)
132 | .padding(.trailing)
133 |
134 | ForEach(colors, id: \.self){color in
135 | Button {
136 | self.itemColor = color
137 |
138 | } label: {
139 | Circle()
140 | .fill(color.opacity(0.5))
141 | .frame(width: 25, height: 25)
142 | .overlay(
143 | Circle()
144 | .stroke(Color("Btnbg"), lineWidth: 1.5)
145 | .opacity(itemColor == color ? 0.2 : 0)
146 | .padding(-4)
147 | )
148 | }
149 | }
150 | } // END Color
151 | .padding(.vertical)
152 |
153 | //MARK: - ADD TO CART
154 | Button {
155 |
156 | } label: {
157 | HStack(spacing: 15) {
158 | Image("cart")
159 | .resizable()
160 | .renderingMode(.template)
161 | .aspectRatio(contentMode: .fit)
162 | .frame(width: 20, height: 20)
163 |
164 | Text("Add to cart")
165 | .fontWeight(.bold)
166 | }
167 | .foregroundColor(Color("Btnbg"))
168 | .padding(.vertical)
169 | .frame(maxWidth: .infinity)
170 | .background(Color("Btnbg").opacity(0.06))
171 | .clipShape(Capsule())
172 | }
173 | .padding(.top)
174 |
175 | }
176 | .padding(.top)
177 | .padding()
178 | .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
179 | .background(
180 | Color("Btnbg")
181 | .opacity(0.05)
182 | .cornerRadius(20)
183 | .ignoresSafeArea(.container, edges: .bottom)
184 | )
185 | }
186 | .padding(.top)
187 | .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
188 | .background(Color.white)
189 | .transition(.opacity)
190 | }
191 | }
192 | }
193 |
194 | struct DetailView_Previews: PreviewProvider {
195 | static var previews: some View {
196 | ContentView()
197 | }
198 | }
199 |
200 | //MARK: - VIEW EXTENSION
201 |
202 | extension View {
203 | func getScreenBound()-> CGRect {
204 | return UIScreen.main.bounds
205 | }
206 | }
207 |
--------------------------------------------------------------------------------
/Uray/View/Home.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Home.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 11/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct Home: View {
11 | //MARK: - GEOMETRY EFFECT
12 | @Namespace var animation
13 | @EnvironmentObject var baseData: BaseViewModel
14 | @State var currentSlider: Int = 0
15 | @State var sliders: [Slider] = []
16 |
17 | var body: some View {
18 | ScrollView(.vertical, showsIndicators: false) {
19 | VStack(spacing: 15) {
20 | //MARK - APP BAR
21 | HStack {
22 | //MARK: DRAWER MENU
23 | Button {
24 |
25 | } label: {
26 | Image("menu")
27 | .renderingMode(.template)
28 | .resizable()
29 | .aspectRatio(contentMode: .fit)
30 | .frame(width: 25, height: 25)
31 | } // END DRAWER MENU
32 |
33 | Spacer()
34 |
35 | //MARK: SEARCH ICON
36 | Button {
37 |
38 | } label: {
39 | Image(systemName: "magnifyingglass")
40 | .font(.title2)
41 | } // END SEARCH ICON
42 | }
43 | .foregroundColor(.black)
44 | .overlay(
45 | Image("logo")
46 | .resizable()
47 | .frame(width: 74, height: 34)
48 | )
49 | // END APP BAR
50 |
51 | //MARK: SLIDER
52 | VStack(spacing: 15) {
53 | VStack(alignment: .leading, spacing: 12) {
54 | HomeSlider(trailingSpace: 40, index: $currentSlider, items: sliders) {slider in
55 | GeometryReader{proxy in
56 | let sliderSize = proxy.size
57 |
58 | Image(slider.sliderImage)
59 | .resizable()
60 | .aspectRatio(contentMode: .fill)
61 | .frame(width: sliderSize.width)
62 | .cornerRadius(12)
63 | }
64 | }
65 | .padding(.vertical,10)
66 | }
67 | .frame(maxHeight: .infinity, alignment: .top)
68 | .onAppear{
69 | for index in 1...4 {
70 | sliders.append(Slider(sliderImage: "slider\(index)"))
71 | }
72 | }
73 | } // END SLIDER
74 | .padding(.bottom, 20)
75 |
76 | //MARK: - SLIDER INDICATOR
77 | HStack(spacing: 10) {
78 | ForEach(sliders.indices, id: \.self){index in
79 | Circle()
80 | .fill(Color.black.opacity(currentSlider == index ? 1: 0.1))
81 | .frame(width: 7, height: 8)
82 | .scaleEffect(currentSlider == index ? 1.4 : 1)
83 | .animation(.spring(), value: currentSlider == index)
84 | }
85 | }
86 | .padding(.top, 120)
87 |
88 |
89 | //MARK: - BODY TOP
90 | HStack {
91 | Text("Our Products")
92 | .font(.title.bold())
93 | Spacer()
94 | Button {
95 |
96 | } label: {
97 | HStack(spacing: 3) {
98 | Text("Sort by")
99 | .font(.caption.bold())
100 | Image(systemName: "chevron.down")
101 | .font(.caption.bold())
102 | }
103 | .foregroundColor(.gray)
104 | }
105 | } // END BODY TOP
106 | .padding(.top, 10)
107 |
108 | //MARK: - CATEGORY LIST SLIDER
109 | ScrollView(.horizontal, showsIndicators: false) {
110 | //MARK: - CATEGORY LIST
111 | HStack(spacing: 18) {
112 | CategoryItem(image: "cat1", title: "Facewash")
113 |
114 | CategoryItem(image: "cat2", title: "Skin Care")
115 |
116 | CategoryItem(image: "cat3", title: "Health Care")
117 |
118 | CategoryItem(image: "cat4", title: "Backpack")
119 | } // END CATEGORY LIST
120 | .padding(.vertical)
121 | }
122 | //MARK: - PRODUCT LIST
123 | let columns = Array(repeating: GridItem(.flexible(), spacing: 15), count: 2)
124 |
125 | // MARK: - GRID VIEW
126 | LazyVGrid(columns: columns, spacing: 18) {
127 | ForEach(products){product in
128 | CardView(product: product)
129 | .onTapGesture {
130 | withAnimation{
131 | baseData.currentProduct = product
132 | baseData.showDetail = true
133 | }
134 | }
135 | }
136 | }
137 | }
138 | .padding()
139 | //MARK: - Bottom Tab Bar Approx Padding
140 | .padding(.bottom, 100)
141 | }
142 | .overlay(
143 | DetailView(animation: animation)
144 | .environmentObject(baseData)
145 | )
146 | }
147 |
148 | //MARK: PRODUCT VIEW
149 | @ViewBuilder
150 | func CardView(product: Product)-> some View {
151 | VStack(spacing: 15) {
152 |
153 | //MARK: LIKED BUTTON
154 | Button {
155 |
156 | } label: {
157 | Image(systemName: "suit.heart.fill")
158 | .font(.system(size: 13))
159 | .foregroundColor(product.isLiked ? .white : .gray)
160 | .padding(5)
161 | .background(
162 | Color.red.opacity(product.isLiked ? 1: 0), in: Circle()
163 |
164 | )
165 | } // END LIKED BUTTON
166 | .frame(maxWidth: .infinity, alignment: .trailing)
167 |
168 | //MARK: - PRODUCT IMAGE
169 | Image(product.productImage)
170 | .resizable()
171 | .aspectRatio(contentMode: .fit)
172 | .matchedGeometryEffect(id: product.productImage, in: animation)
173 | .padding()
174 | .rotationEffect(.init(degrees: -20))
175 | .background(
176 | ZStack {
177 | Circle()
178 | .fill(product.productColor)
179 | .padding(-10)
180 | //MARK: - INNER CIRCLE
181 | Circle()
182 | .stroke(Color.white, lineWidth: 1.4)
183 | .padding(-3)
184 | }
185 | ) // END PRODUCT IMAGE
186 |
187 | //MARK: PRODUCT TITLE
188 | Text(product.productTitle)
189 | .fontWeight(.semibold)
190 | .padding(.top)
191 |
192 | //MARK: - PRODUCT PRICE
193 | Text(product.productPrice)
194 | .font(.title2.bold())
195 |
196 | //MARK: - RATIING
197 | HStack(spacing: 4) {
198 | ForEach(1...5, id: \.self){index in
199 | Image(systemName: "star.fill")
200 | .font(.system(size: 9.5))
201 | .foregroundColor(product.productRating >= index ? .yellow : Color.gray.opacity(0.6))
202 | }
203 |
204 | Text("(\(product.productRating).0)")
205 | .font(.caption.bold())
206 | .foregroundColor(.gray)
207 | }
208 |
209 | }
210 | .padding()
211 | .background(Color.white, in: RoundedRectangle(cornerRadius: 12))
212 | }
213 |
214 | //MARK: CATEGORY VIEW
215 | @ViewBuilder
216 | func CategoryItem(image: String, title: String)-> some View {
217 | Button {
218 | withAnimation{baseData.homeTab = title}
219 | } label: {
220 | HStack(spacing: 8) {
221 | Image(image)
222 | .resizable()
223 | .aspectRatio(contentMode: .fit)
224 | .frame(width: 27, height: 27)
225 | Text(title)
226 | .font(.system(size: 12.5))
227 | .fontWeight(.bold)
228 | .foregroundColor(.black)
229 | }
230 | .padding(.vertical, 8)
231 | .padding(.horizontal, 12)
232 | .background(
233 |
234 | ZStack {
235 | //MARK: - TRANSITION SLIDER
236 | if baseData.homeTab == title {
237 | RoundedRectangle(cornerRadius: 10)
238 | .fill(Color.white)
239 | .matchedGeometryEffect(id: "TAB", in: animation)
240 | .shadow(color: Color.black.opacity(0.04), radius: 5, x: 5, y: 5)
241 | }
242 | }
243 |
244 | )
245 | }
246 | }
247 | }
248 |
249 | struct Home_Previews: PreviewProvider {
250 | static var previews: some View {
251 | ContentView()
252 | }
253 | }
254 |
--------------------------------------------------------------------------------
/Uray/View/HomeSlider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeSlider.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 12/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct HomeSlider: View {
11 | var content: (T) -> Content
12 | var list: [T]
13 |
14 | // MARK: - SLIDER PROPERTISE
15 | var spacing: CGFloat
16 | var trailingSpace: CGFloat
17 | @Binding var index: Int
18 |
19 | init(spacing: CGFloat = 15, trailingSpace: CGFloat = 100, index: Binding,items: [T],@ViewBuilder content: @escaping (T)->Content) {
20 | self.list = items
21 | self.spacing = spacing
22 | self.trailingSpace = trailingSpace
23 | self._index = index
24 | self.content = content
25 | }
26 |
27 | @GestureState var offset: CGFloat = 0
28 | @State var currentSlider: Int = 0
29 |
30 | var body: some View {
31 | GeometryReader{proxy in
32 |
33 | let width = proxy.size.width - (trailingSpace - spacing)
34 | let adjustmentWidth = (trailingSpace / 2) - spacing
35 |
36 | HStack(spacing: spacing) {
37 | ForEach(list){item in
38 | content(item)
39 | .frame(width: proxy.size.width - trailingSpace)
40 | }
41 | }
42 | .padding(.horizontal,spacing)
43 | .offset(x:(CGFloat(currentSlider) * -width) + (currentSlider != 0 ? adjustmentWidth : 0) + offset)
44 | .gesture(
45 | DragGesture()
46 | .updating($offset, body: { value, out, _ in
47 | out = value.translation.width
48 | })
49 | .onEnded({value in
50 | let offsetX = value.translation.width
51 | let progress = -offsetX / width
52 | let roundIndex = progress.rounded()
53 |
54 | currentSlider = max(min(currentSlider + Int(roundIndex), list.count - 1), 0)
55 |
56 | currentSlider = index
57 |
58 | })
59 | .onChanged({value in
60 | let offsetX = value.translation.width
61 | let progress = -offsetX / width
62 | let roundIndex = progress.rounded()
63 |
64 | index = max(min(currentSlider + Int(roundIndex), list.count - 1), 0)
65 | })
66 | )
67 | }
68 | .animation(.easeInOut, value: offset == 0)
69 | }
70 | }
71 |
72 | struct HomeSlider_Previews: PreviewProvider {
73 | static var previews: some View {
74 | ContentView()
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/Uray/ViewModel/BaseViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseViewModel.swift
3 | // Uray
4 | //
5 | // Created by Shameem Reza on 11/3/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | class BaseViewModel: ObservableObject {
11 | // MARK: - TAB BAR
12 | @Published var currentTab: Tab = .Home
13 |
14 | @Published var homeTab = "Facewash"
15 |
16 | // MARK: - DETAIL VIEW
17 | @Published var currentProduct: Product?
18 | @Published var showDetail = false
19 | }
20 |
21 | // MARK: - TAB ITEM CASE
22 | enum Tab: String {
23 | case Home = "home"
24 | case Heart = "heart"
25 | case ClipBoard = "clipboard"
26 | case Person = "person"
27 | }
28 |
--------------------------------------------------------------------------------
/row/preview-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/row/preview-1.png
--------------------------------------------------------------------------------
/row/preview-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/row/preview-2.png
--------------------------------------------------------------------------------
/row/preview-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/row/preview-3.png
--------------------------------------------------------------------------------
/row/preview-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shameemreza/uray/fe149655a03598b7604e43c6d54565f6f827a6e1/row/preview-4.png
--------------------------------------------------------------------------------