tailwind_dsl 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,174 @@
1
+ KManager.action :domain_model do
2
+ action do
3
+
4
+ DrawioDsl::Drawio
5
+ .init(k_builder, on_exist: :write, on_action: :execute)
6
+ .diagram(theme: :style_04)
7
+ .page('Domain Modal', margin_left: 0, margin_top: 0, rounded: 0, background: '#fafafa') do
8
+ grid_layout(wrap_at: 6, grid_w: 220, grid_h: 180)
9
+
10
+ group(title: 'Tailwind GEM', theme: :style_01)
11
+
12
+ group(title: 'Configuration', theme: :style_01)
13
+
14
+ klass(:a1, w: 200, description: 'Configuration container for the Tailwind DSL') do
15
+ format
16
+ .header('Configuration', namespace: :config)
17
+ .field(:collections , type: :Collections) # winter, summer
18
+ .field(:themes , type: :Themes) # light, dark, red, blue
19
+ .field(:data_shapes , type: :DataShapes) # obj, heading_paragraph_list, image_heading_paragraph_list
20
+ .field(:component_groups , type: :ComponentGroups) # nav, footer, header, hero, price
21
+ end
22
+
23
+ klass(:a2, w: 200, description: 'Configuration for collection', note: 'other words could be - brands / set / design / collection') do
24
+ format
25
+ .header('Collection', namespace: :config)
26
+ .field(:name, type: :String)
27
+ .field(:description, type: :String)
28
+ .field(:component_groups , type: :ComponentGroups) # winter, summer
29
+ .field(:default_themes , type: :Themes) # light, dark
30
+ end
31
+
32
+ klass(:a3, w: 200, description: 'Configuration for theme', note: 'light, dark, red, green') do
33
+ format
34
+ .header('Theme', namespace: :config)
35
+ .field(:key, type: :Symbol)
36
+ .field(:name, type: :String) # The name will default to the titleized version of the key
37
+ .field(:description, type: :String)
38
+ end
39
+
40
+ klass(:a4, w: 200, description: 'Configuration for data shape', note: 'object, key_value array') do
41
+ format
42
+ .header('DataShape')
43
+ .field(:key, type: :Symbol)
44
+ .field(:name, type: :String)
45
+ .field(:description, type: :String)
46
+ end
47
+
48
+ klass(:a5, w: 200, description: 'Configuration for component group', note: 'nav, , footer, header, hero, price') do
49
+ format
50
+ .header('ComponentGroup', namespace: :config)
51
+ .field(:key, type: :Symbol)
52
+ .field(:name, type: :String)
53
+ .field(:description, type: :String)
54
+ .field(:collection, type: :Collection) # belongs_to (foreign_key)
55
+ .field(:components , type: :Components) # 01, 02, 03
56
+ end
57
+
58
+ klass(:a6, w: 200, description: 'Configuration for component', note: '01, 02, 03') do
59
+ format
60
+ .header('Component', namespace: :config)
61
+ .field(:key, type: :Symbol)
62
+ .field(:name, type: :String)
63
+ .field(:description, type: :String)
64
+ .field(:data_shape, type: :DataShape)
65
+ end
66
+
67
+ solid(source: :a1, target: :a2, exit_point: :e, entry_point: :w, waypoint: :orthogonal_curved)
68
+ solid(source: :a1, target: :a3, exit_point: :e, entry_point: :w, waypoint: :orthogonal_curved)
69
+ solid(source: :a1, target: :a4, exit_point: :e, entry_point: :w, waypoint: :orthogonal_curved)
70
+ solid(source: :a1, target: :a5, exit_point: :e, entry_point: :w, waypoint: :orthogonal_curved)
71
+ solid(source: :a5, target: :a6, exit_point: :e, entry_point: :w, waypoint: :orthogonal_curved)
72
+ solid(source: :a6, target: :a4, exit_point: :w, entry_point: :e, waypoint: :orthogonal_curved)
73
+ solid(source: :a2, target: :a3, exit_point: :w, entry_point: :e, waypoint: :orthogonal_curved)
74
+
75
+ group(title: 'Schema', theme: :style_01)
76
+
77
+ # website -> root<Page> (start of sitemap)
78
+ # -> page -> pages [about, contact, news, products, services, terms, privacy] -> news -> news_item
79
+ # -> page -> components -> component -> data_shape
80
+
81
+ klass(:b1, w: 200, description: '') do
82
+ format
83
+ .header('WebSite', namespace: :schema)
84
+ .field(:key, type: :Symbol)
85
+ .field(:name, type: :String)
86
+ .field(:description, type: :String)
87
+ .field(:target_folder, type: :String)
88
+ .field(:base_collection, type: :Collection) # belongs_to (foreign_key)
89
+ .field(:theme, type: :Theme) # belongs_to (foreign_key)
90
+ .field(:root, type: :Page)
91
+ .method(:favourite_components, type: :Components) # these are the components have been used in the site and implicitly become favourite
92
+ end
93
+
94
+ klass(:b2, w: 200, description: '') do
95
+ format
96
+ .header('Page', namespace: :schema)
97
+ .field(:key, type: :Symbol)
98
+ .field(:name, type: :String)
99
+ .field(:description, type: :String)
100
+ .field(:sub_folder, type: :String)
101
+ .field(:level, type: :Integer) # level 1 will hold root (home page) and top level pages (about, contact, etc)
102
+ .field(:pages, type: :Pages) # 01, 02, 03
103
+ .field(:components, type: :Components) # 01, 02, 03
104
+ end
105
+
106
+ klass(:b3, w: 200, description: '') do
107
+ format
108
+ .header('Component', namespace: :schema)
109
+ .field(:key, type: :Symbol)
110
+ .field(:name, type: :String)
111
+ .field(:description, type: :String)
112
+ .field(:component_group, type: :ComponentGroup) # belongs_to (foreign_key)
113
+ .field(:data_shape, type: :DataShape)
114
+ end
115
+
116
+ solid(source: :b1, target: :b2, exit_point: :e, entry_point: :w, waypoint: :orthogonal_curved)
117
+ solid(source: :b2, target: :b3, exit_point: :e, entry_point: :w, waypoint: :orthogonal_curved)
118
+ solid(source: :b2, target: :b2, exit_point: :e, entry_point: :s, waypoint: :orthogonal_curved)
119
+
120
+ group(title: 'Tailwind Generator', theme: :style_01)
121
+
122
+ # MVC pattern
123
+ # Model (data shape) -> View (component html) -> Controller (tailwind generator)
124
+
125
+ group(title: 'Tailwind DSL', theme: :style_01)
126
+
127
+ klass(w: 200, description: 'DSL for tailwind websites') do
128
+ format
129
+ .header('TailwindDsl')
130
+ .method(:website)
131
+ .method(:page)
132
+ .method(:component)
133
+ .method(:save)
134
+ end
135
+
136
+ group(title: 'DataBuilder', theme: :style_01)
137
+
138
+ klass(w: 200, description: 'Base for any Data Builder') do
139
+ format
140
+ .header('BaseDataBuilder')
141
+ .field(:obj, type: :Hash)
142
+ end
143
+
144
+ # page('home') do
145
+ # component('nav') do
146
+ # data
147
+ # .logo('xmen.png')
148
+ # .menu('About', 'about.html')
149
+ # .menu('Contact', 'contact.html')
150
+ # .menu('News', 'news.html')
151
+ # end
152
+
153
+ interface(description: 'Create an instance of a DataBuilder for the target component', theme: :style_02) do
154
+ format
155
+ .header('Factory', interface_type: 'MixIn')
156
+ .method(:data)
157
+ .method(:data_instance)
158
+ end
159
+ end
160
+ .cd(:docs)
161
+ .save('domain-model.drawio')
162
+ .save_json('domain-model')
163
+ .export_svg('domain-model', page: 1)
164
+ end
165
+ end
166
+
167
+ KManager.opts.app_name = 'tailwind_domain_model'
168
+ KManager.opts.sleep = 2
169
+ KManager.opts.reboot_on_kill = 0
170
+ KManager.opts.reboot_sleep = 4
171
+ KManager.opts.exception_style = :long
172
+ KManager.opts.show.time_taken = true
173
+ KManager.opts.show.finished = true
174
+ KManager.opts.show.finished_message = 'FINISHED :)'
@@ -0,0 +1,36 @@
1
+ KManager.action :project_plan do
2
+ action do
3
+
4
+ DrawioDsl::Drawio
5
+ .init(k_builder, on_exist: :write, on_action: :execute)
6
+ .diagram(rounded: 1, glass: 1)
7
+ .page('In progress', theme: :style_03, margin_left: 0, margin_top: 0) do
8
+
9
+ h5(x: 300, y: 0, w: 400, h: 80, title: 'DrawIO DSL')
10
+
11
+ grid_layout(y: 90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
12
+
13
+ todo(title: 'build a or addapt the existing RubyDsl so that it can write classes and specs based on tailwind domain model')
14
+
15
+ end
16
+ .page('To Do', theme: :style_02, margin_left: 0, margin_top: 0) do
17
+
18
+ # h5(x: 300, y: 0, w: 400, h: 80, title: 'DrawIO DSL')
19
+
20
+ grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
21
+
22
+ end
23
+ .page('Done', theme: :style_06, margin_left: 0, margin_top: 0) do
24
+
25
+ # h5(x: 300, y: 0, w: 400, h: 80, title: 'DrawIO DSL')
26
+
27
+ grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
28
+
29
+ end
30
+ .cd(:docs)
31
+ .save('project-plan/project.drawio')
32
+ .export_svg('project-plan/project_in_progress', page: 1)
33
+ .export_svg('project-plan/project_todo' , page: 2)
34
+ .export_svg('project-plan/project_done' , page: 3)
35
+ end
36
+ end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [0.0.2](https://github.com/klueless-io/tailwind_dsl/compare/v0.0.1...v0.0.2) (2022-04-01)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * final gem setup ([1d3c603](https://github.com/klueless-io/tailwind_dsl/commit/1d3c6030359322655529ac91f4af46511a51941c))
7
+
1
8
  ## [Unreleased]
2
9
 
3
10
  ## [0.1.0] - 2022-04-02
@@ -0,0 +1,109 @@
1
+ <mxfile host="65bd71144e">
2
+ <diagram id="gHN" name="Domain Modal">
3
+ <mxGraphModel dx="1311" dy="583" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" background="#CCE5FF" math="0" shadow="0">
4
+ <root>
5
+ <mxCell id="page_root_gHN"/>
6
+ <mxCell id="node_root_gHN" parent="page_root_gHN"/>
7
+ <mxCell id="syoxd6ieJrQFCAj4x4gr-0" value="" style="group" vertex="1" connectable="0" parent="node_root_gHN">
8
+ <mxGeometry x="52" y="915" width="452" height="165" as="geometry"/>
9
+ </mxCell>
10
+ <mxCell id="gHN-27" value="DataBuilder" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" parent="syoxd6ieJrQFCAj4x4gr-0" vertex="1">
11
+ <mxGeometry width="452" height="165" as="geometry"/>
12
+ </mxCell>
13
+ <mxCell id="gHN-28" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;BaseDataBuilder&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;obj: Hash&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-0" vertex="1">
14
+ <mxGeometry x="28" y="52" width="200" height="46" as="geometry"/>
15
+ </mxCell>
16
+ <mxCell id="gHN-29" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt; MixIn &amp;gt;&amp;gt;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Factory&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;data()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;data_instance()&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-0" vertex="1">
17
+ <mxGeometry x="268" y="52" width="160" height="87" as="geometry"/>
18
+ </mxCell>
19
+ <mxCell id="syoxd6ieJrQFCAj4x4gr-1" value="" style="group" vertex="1" connectable="0" parent="node_root_gHN">
20
+ <mxGeometry x="55" y="593" width="874" height="285" as="geometry"/>
21
+ </mxCell>
22
+ <mxCell id="gHN-17" value="Schema" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" parent="syoxd6ieJrQFCAj4x4gr-1" vertex="1">
23
+ <mxGeometry width="874" height="270" as="geometry"/>
24
+ </mxCell>
25
+ <mxCell id="b1" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;WebSite&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;key: Symbol&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;name: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;description: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;target_folder: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;base_collection: Collection&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;theme: Theme&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;root: Page&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;favourite_components() : Components&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-1" vertex="1">
26
+ <mxGeometry x="16" y="47" width="218" height="198" as="geometry"/>
27
+ </mxCell>
28
+ <mxCell id="b2" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;key: Symbol&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;name: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;description: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;sub_folder: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;level: Integer&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;pages: Pages&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;components: Components&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-1" vertex="1">
29
+ <mxGeometry x="321" y="66" width="200" height="160" as="geometry"/>
30
+ </mxCell>
31
+ <mxCell id="b3" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Component&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;key: Symbol&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;name: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;description: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;component_group: ComponentGroup&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;data_shape: DataShape&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-1" vertex="1">
32
+ <mxGeometry x="651" y="66" width="200" height="160" as="geometry"/>
33
+ </mxCell>
34
+ <mxCell id="gHN-21" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#a20025;strokeColor=#6F0000;" parent="syoxd6ieJrQFCAj4x4gr-1" source="b1" target="b2" edge="1">
35
+ <mxGeometry relative="1" as="geometry"/>
36
+ </mxCell>
37
+ <mxCell id="gHN-22" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#a20025;strokeColor=#6F0000;" parent="syoxd6ieJrQFCAj4x4gr-1" source="b2" target="b3" edge="1">
38
+ <mxGeometry relative="1" as="geometry"/>
39
+ </mxCell>
40
+ <mxCell id="gHN-23" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;fillColor=#a20025;strokeColor=#6F0000;curved=1;" parent="syoxd6ieJrQFCAj4x4gr-1" source="b2" target="b2" edge="1">
41
+ <mxGeometry relative="1" as="geometry">
42
+ <Array as="points">
43
+ <mxPoint x="592" y="285"/>
44
+ </Array>
45
+ </mxGeometry>
46
+ </mxCell>
47
+ <mxCell id="syoxd6ieJrQFCAj4x4gr-2" value="" style="group" vertex="1" connectable="0" parent="node_root_gHN">
48
+ <mxGeometry x="90" y="28" width="853" height="526" as="geometry"/>
49
+ </mxCell>
50
+ <mxCell id="gHN-3" value="Configuration" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" parent="syoxd6ieJrQFCAj4x4gr-2" vertex="1">
51
+ <mxGeometry width="853" height="526" as="geometry"/>
52
+ </mxCell>
53
+ <mxCell id="a1" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Configuration&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;collections: Collections&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;themes: Themes&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;data_shapes: DataShapes&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;component_groups: ComponentGroups&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-2" vertex="1">
54
+ <mxGeometry x="26.39" y="46" width="222.61" height="105" as="geometry"/>
55
+ </mxCell>
56
+ <mxCell id="a2" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Collection&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;name: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;description: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;component_groups: ComponentGroups&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;default_themes: Themes&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-2" vertex="1">
57
+ <mxGeometry x="335.71039603960395" y="42" width="235.41955445544554" height="119" as="geometry"/>
58
+ </mxCell>
59
+ <mxCell id="a3" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Theme&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;key: Symbol&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;name: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;description: String&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-2" vertex="1">
60
+ <mxGeometry x="335.71039603960395" y="179" width="235.41955445544554" height="86" as="geometry"/>
61
+ </mxCell>
62
+ <mxCell id="a4" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;DataShape&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;key: Symbol&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;name: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;description: String&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-2" vertex="1">
63
+ <mxGeometry x="335.71039603960395" y="283" width="235.41955445544554" height="84" as="geometry"/>
64
+ </mxCell>
65
+ <mxCell id="a5" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;ComponentGroup&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;key: Symbol&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;name: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;description: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;collection: Collection&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;components: Components&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-2" vertex="1">
66
+ <mxGeometry x="335.71039603960395" y="385" width="236.47524752475246" height="121" as="geometry"/>
67
+ </mxCell>
68
+ <mxCell id="a6" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Component&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;key: Symbol&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;name: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;description: String&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;data_shape: DataShape&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="syoxd6ieJrQFCAj4x4gr-2" vertex="1">
69
+ <mxGeometry x="681" y="338" width="147.72" height="104" as="geometry"/>
70
+ </mxCell>
71
+ <mxCell id="gHN-10" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;fillColor=#a20025;strokeColor=#6F0000;rounded=1;" parent="syoxd6ieJrQFCAj4x4gr-2" source="a1" target="a2" edge="1">
72
+ <mxGeometry relative="1" as="geometry"/>
73
+ </mxCell>
74
+ <mxCell id="gHN-11" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;fillColor=#a20025;strokeColor=#6F0000;rounded=1;" parent="syoxd6ieJrQFCAj4x4gr-2" source="a1" target="a3" edge="1">
75
+ <mxGeometry relative="1" as="geometry"/>
76
+ </mxCell>
77
+ <mxCell id="gHN-12" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;fillColor=#a20025;strokeColor=#6F0000;rounded=1;" parent="syoxd6ieJrQFCAj4x4gr-2" source="a1" target="a4" edge="1">
78
+ <mxGeometry relative="1" as="geometry"/>
79
+ </mxCell>
80
+ <mxCell id="gHN-13" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;fillColor=#a20025;strokeColor=#6F0000;rounded=1;" parent="syoxd6ieJrQFCAj4x4gr-2" source="a1" target="a5" edge="1">
81
+ <mxGeometry relative="1" as="geometry"/>
82
+ </mxCell>
83
+ <mxCell id="gHN-14" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=1.013;exitY=0.876;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;rounded=1;fillColor=#a20025;strokeColor=#6F0000;exitPerimeter=0;" parent="syoxd6ieJrQFCAj4x4gr-2" source="a5" target="a6" edge="1">
84
+ <mxGeometry relative="1" as="geometry"/>
85
+ </mxCell>
86
+ <mxCell id="gHN-15" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;rounded=1;fillColor=#a20025;strokeColor=#6F0000;" parent="syoxd6ieJrQFCAj4x4gr-2" source="a6" target="a4" edge="1">
87
+ <mxGeometry relative="1" as="geometry"/>
88
+ </mxCell>
89
+ <mxCell id="gHN-16" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=classic;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#a20025;strokeColor=#6F0000;" parent="syoxd6ieJrQFCAj4x4gr-2" source="a2" target="a3" edge="1">
90
+ <mxGeometry relative="1" as="geometry">
91
+ <Array as="points">
92
+ <mxPoint x="618.6361386138614" y="102"/>
93
+ <mxPoint x="618.6361386138614" y="222"/>
94
+ </Array>
95
+ </mxGeometry>
96
+ </mxCell>
97
+ <mxCell id="syoxd6ieJrQFCAj4x4gr-3" value="Tailwind Generator" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" vertex="1" parent="node_root_gHN">
98
+ <mxGeometry x="48" y="1130" width="210" height="210" as="geometry"/>
99
+ </mxCell>
100
+ <mxCell id="syoxd6ieJrQFCAj4x4gr-4" value="Tailwind DSL" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" vertex="1" parent="node_root_gHN">
101
+ <mxGeometry x="274" y="1130" width="210" height="210" as="geometry"/>
102
+ </mxCell>
103
+ <mxCell id="syoxd6ieJrQFCAj4x4gr-5" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;TailwindDsl&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;website()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;page()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;component()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;save()&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" vertex="1" parent="node_root_gHN">
104
+ <mxGeometry x="502" y="1130" width="200" height="160" as="geometry"/>
105
+ </mxCell>
106
+ </root>
107
+ </mxGraphModel>
108
+ </diagram>
109
+ </mxfile>