tailwind_dsl 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/generators/domain-model.rb +30 -28
  3. data/.builders/generators/utilities.rb +19 -17
  4. data/CHANGELOG.md +7 -0
  5. data/docs/domain-model.drawio +49 -46
  6. data/docs/domain-model.json +144 -121
  7. data/docs/domain-model.svg +1 -1
  8. data/lib/tailwind_dsl/etl/component_structures/raw_component_query.rb +197 -0
  9. data/lib/tailwind_dsl/version.rb +1 -1
  10. data/lib/tailwind_dsl.rb +1 -0
  11. data/package-lock.json +2 -2
  12. data/package.json +1 -1
  13. metadata +3 -50
  14. data/.components/tui/application-ui/component/data-display/calendar/01.clean.html +0 -204
  15. data/.components/tui/application-ui/component/data-display/calendar/01.html +0 -243
  16. data/.components/tui/application-ui/component/data-display/calendar/01.settings.json +0 -9
  17. data/.components/tui/application-ui/component/data-display/calendar/02.clean.html +0 -496
  18. data/.components/tui/application-ui/component/data-display/calendar/02.html +0 -551
  19. data/.components/tui/application-ui/component/data-display/calendar/02.settings.json +0 -9
  20. data/.components/tui/application-ui/component/data-display/calendar/03.clean.html +0 -240
  21. data/.components/tui/application-ui/component/data-display/calendar/03.html +0 -274
  22. data/.components/tui/application-ui/component/data-display/calendar/03.settings.json +0 -9
  23. data/.components/tui/application-ui/component/data-display/calendar/04.clean.html +0 -385
  24. data/.components/tui/application-ui/component/data-display/calendar/04.html +0 -439
  25. data/.components/tui/application-ui/component/data-display/calendar/04.settings.json +0 -9
  26. data/.components/tui/application-ui/component/data-display/calendar/05.clean.html +0 -211
  27. data/.components/tui/application-ui/component/data-display/calendar/05.html +0 -254
  28. data/.components/tui/application-ui/component/data-display/calendar/05.settings.json +0 -9
  29. data/.components/tui/application-ui/component/data-display/calendar/06.clean.html +0 -320
  30. data/.components/tui/application-ui/component/data-display/calendar/06.html +0 -336
  31. data/.components/tui/application-ui/component/data-display/calendar/06.settings.json +0 -9
  32. data/.components/tui/application-ui/component/data-display/calendar/07.clean.html +0 -266
  33. data/.components/tui/application-ui/component/data-display/calendar/07.html +0 -294
  34. data/.components/tui/application-ui/component/data-display/calendar/07.settings.json +0 -9
  35. data/.components/tui/application-ui/component/data-display/calendar/08.clean.html +0 -268
  36. data/.components/tui/application-ui/component/data-display/calendar/08.html +0 -296
  37. data/.components/tui/application-ui/component/data-display/calendar/08.settings.json +0 -9
  38. data/.components/tui/application-ui/component/data-display/description-list/01.clean.html +0 -59
  39. data/.components/tui/application-ui/component/data-display/description-list/01.html +0 -61
  40. data/.components/tui/application-ui/component/data-display/description-list/01.settings.json +0 -9
  41. data/.components/tui/application-ui/component/data-display/description-list/02.clean.html +0 -59
  42. data/.components/tui/application-ui/component/data-display/description-list/02.html +0 -61
  43. data/.components/tui/application-ui/component/data-display/description-list/02.settings.json +0 -9
  44. data/.components/tui/application-ui/component/data-display/description-list/03.clean.html +0 -86
  45. data/.components/tui/application-ui/component/data-display/description-list/03.html +0 -88
  46. data/.components/tui/application-ui/component/data-display/description-list/03.settings.json +0 -9
  47. data/.components/tui/application-ui/component/data-display/description-list/04.clean.html +0 -59
  48. data/.components/tui/application-ui/component/data-display/description-list/04.html +0 -61
  49. data/.components/tui/application-ui/component/data-display/description-list/04.settings.json +0 -9
  50. data/.components/tui/application-ui/component/data-display/description-list/05.clean.html +0 -59
  51. data/.components/tui/application-ui/component/data-display/description-list/05.html +0 -61
  52. data/.components/tui/application-ui/component/data-display/description-list/05.settings.json +0 -9
  53. data/.components/tui/application-ui/component/data-display/stats/01.clean.html +0 -17
  54. data/.components/tui/application-ui/component/data-display/stats/01.html +0 -19
  55. data/.components/tui/application-ui/component/data-display/stats/01.settings.json +0 -9
  56. data/.components/tui/application-ui/component/data-display/stats/02.clean.html +0 -80
  57. data/.components/tui/application-ui/component/data-display/stats/02.html +0 -89
  58. data/.components/tui/application-ui/component/data-display/stats/02.settings.json +0 -9
  59. data/.components/tui/application-ui/component/data-display/stats/03.clean.html +0 -53
  60. data/.components/tui/application-ui/component/data-display/stats/03.html +0 -61
  61. data/.components/tui/application-ui/component/data-display/stats/03.settings.json +0 -9
@@ -1,3 +1,3 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1322px" height="727px" viewBox="-0.5 -0.5 1322 727"><defs/><g><rect x="5" y="0" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 7px; margin-left: 6px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Tailwind GEM</div></div></div></foreignObject><text x="110" y="27" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Tailwind GEM</text></switch></g><rect x="225" y="0" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 7px; margin-left: 226px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Configuration</div></div></div></foreignObject><text x="330" y="27" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Configuration</text></switch></g><rect x="450" y="25" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 25px; margin-left: 450px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Configuration</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">collections: Collections</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">themes: Themes</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_shapes: DataShapes</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">component_groups: ComponentGroups</p></div></div></div></foreignObject><text x="450" y="109" fill="#333333" font-family="Helvetica" font-size="12px">Configuration...</text></switch></g><rect x="670" y="25" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 25px; margin-left: 670px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Collection</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">component_groups: ComponentGroups</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">default_themes: Themes</p></div></div></div></foreignObject><text x="670" y="109" fill="#333333" font-family="Helvetica" font-size="12px">Collection...</text></switch></g><rect x="890" y="25" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 25px; margin-left: 890px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Theme</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p></div></div></div></foreignObject><text x="890" y="109" fill="#333333" font-family="Helvetica" font-size="12px">Theme...</text></switch></g><rect x="1110" y="25" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 25px; margin-left: 1110px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>DataShape</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p></div></div></div></foreignObject><text x="1110" y="109" fill="#333333" font-family="Helvetica" font-size="12px">DataShape...</text></switch></g><rect x="10" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 10px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>ComponentGroup</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">collection: Collection</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">components: Components</p></div></div></div></foreignObject><text x="10" y="289" fill="#333333" font-family="Helvetica" font-size="12px">ComponentGroup...</text></switch></g><rect x="230" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 230px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Component</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_shape: DataShape</p></div></div></div></foreignObject><text x="230" y="289" fill="#333333" font-family="Helvetica" font-size="12px">Component...</text></switch></g><path d="M 650 105 Q 650 105 667.76 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 661.88 108.5 L 668.88 105 L 661.88 101.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 650 105 Q 650 105 887.76 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 881.88 108.5 L 888.88 105 L 881.88 101.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 650 105 Q 650 105 1107.76 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1101.88 108.5 L 1108.88 105 L 1101.88 101.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 650 105 Q 660 105 660 150 Q 660 195 330 195 Q 0 195 0 240 Q 0 285 7.76 285" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1.88 288.5 L 8.88 285 L 1.88 281.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 210 285 Q 210 285 227.76 285" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 221.88 288.5 L 228.88 285 L 221.88 281.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 230 285 Q 220 285 220 240 Q 220 195 770 195 Q 1320 195 1320 150 Q 1320 105 1312.24 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1318.12 101.5 L 1311.12 105 L 1318.12 108.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 670 105 Q 660 105 660 60 Q 660 15 770 15 Q 880 15 880 105 Q 880 195 990 195 Q 1100 195 1100 150 Q 1100 105 1092.24 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1098.12 101.5 L 1091.12 105 L 1098.12 108.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><rect x="445" y="180" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 187px; margin-left: 446px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Schema</div></div></div></foreignObject><text x="550" y="207" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Schema</text></switch></g><rect x="670" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 670px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>WebSite</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">target_folder: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">base_collection: Collection</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">theme: Theme</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">root: Page</p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">favourite_components() : Components</p></div></div></div></foreignObject><text x="670" y="289" fill="#333333" font-family="Helvetica" font-size="12px">WebSite...</text></switch></g><rect x="890" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 890px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Page</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">sub_folder: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">level: Integer</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">pages: Pages</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">components: Components</p></div></div></div></foreignObject><text x="890" y="289" fill="#333333" font-family="Helvetica" font-size="12px">Page...</text></switch></g><rect x="1110" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 1110px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Component</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">component_group: ComponentGroup</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_shape: DataShape</p></div></div></div></foreignObject><text x="1110" y="289" fill="#333333" font-family="Helvetica" font-size="12px">Component...</text></switch></g><path d="M 870 285 Q 870 285 887.76 285" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 881.88 288.5 L 888.88 285 L 881.88 281.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 1090 285 Q 1090 285 1107.76 285" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1101.88 288.5 L 1108.88 285 L 1101.88 281.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 1090 285 Q 1090 285 991.75 363.6" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 994.15 357.2 L 990.87 364.3 L 998.53 362.66" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><rect x="5" y="360" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 367px; margin-left: 6px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Tailwind Generator</div></div></div></foreignObject><text x="110" y="387" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Tailwind Generator</text></switch></g><rect x="225" y="360" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 367px; margin-left: 226px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Tailwind DSL</div></div></div></foreignObject><text x="330" y="387" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Tailwind DSL</text></switch></g><rect x="450" y="385" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 385px; margin-left: 450px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>TailwindDsl</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">website()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">page()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">component()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">save()</p></div></div></div></foreignObject><text x="450" y="469" fill="#333333" font-family="Helvetica" font-size="12px">TailwindDsl...</text></switch></g><rect x="665" y="360" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 367px; margin-left: 666px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">DataBuilder</div></div></div></foreignObject><text x="770" y="387" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">DataBuilder</text></switch></g><rect x="890" y="385" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 385px; margin-left: 890px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>BaseDataBuilder</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">obj: Hash</p></div></div></div></foreignObject><text x="890" y="469" fill="#333333" font-family="Helvetica" font-size="12px">BaseDataBuilder...</text></switch></g><rect x="1130" y="385" width="160" height="160" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 162px; height: 160px; padding-top: 385px; margin-left: 1130px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 160px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><i>&lt;&lt; MixIn &gt;&gt;</i></p><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Factory</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">data()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_instance()</p></div></div></div></foreignObject><text x="1130" y="469" fill="#333333" font-family="Helvetica" font-size="12px">&lt;&lt; MixIn &gt;&gt;...</text></switch></g><rect x="10" y="565" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 565px; margin-left: 10px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Root</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">design_systems: Types::Strict::Array.of(DesignSystem)</p></div></div></div></foreignObject><text x="10" y="649" fill="#333333" font-family="Helvetica" font-size="12px">Root...</text></switch></g><rect x="230" y="565" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 565px; margin-left: 230px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>DesignSystem</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">path: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">stats: Types::Strict::Hash</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">groups: Types::Strict::Array.of(Group)</p></div></div></div></foreignObject><text x="230" y="649" fill="#333333" font-family="Helvetica" font-size="12px">DesignSystem...</text></switch></g><rect x="450" y="565" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 565px; margin-left: 450px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Group</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">type: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">folder: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">sub_keys: Types::Array.of(Types::Strict:'Types::Strict::String')</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">files: Types::Strict::Array.of(SourceFile)</p></div></div></div></foreignObject><text x="450" y="649" fill="#333333" font-family="Helvetica" font-size="12px">Group...</text></switch></g><rect x="670" y="565" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 565px; margin-left: 670px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>SourceFile</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">file_name: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">file_name_only: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">absolute_file: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">file: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">target: TailwindDsl::XTransformers::RawComponents::TargetFile</p></div></div></div></foreignObject><text x="670" y="649" fill="#333333" font-family="Helvetica" font-size="12px">SourceFile...</text></switch></g><rect x="890" y="565" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 565px; margin-left: 890px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>TargetFile</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">html_file: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">clean_html_file: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">tailwind_config_file: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">settings_file: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_file: Types::Strict::String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">astro_file: Types::Strict::String</p></div></div></div></foreignObject><text x="890" y="649" fill="#333333" font-family="Helvetica" font-size="12px">TargetFile...</text></switch></g><path d="M 210 645 Q 210 645 227.76 645" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 221.88 648.5 L 228.88 645 L 221.88 641.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 430 645 Q 430 645 447.76 645" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 441.88 648.5 L 448.88 645 L 441.88 641.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 650 645 Q 650 645 667.76 645" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 661.88 648.5 L 668.88 645 L 661.88 641.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 870 645 Q 870 645 887.76 645" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 881.88 648.5 L 888.88 645 L 881.88 641.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1322px" height="772px" viewBox="-0.5 -0.5 1322 772"><defs/><g><rect x="5" y="0" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 7px; margin-left: 6px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Tailwind GEM</div></div></div></foreignObject><text x="110" y="27" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Tailwind GEM</text></switch></g><rect x="225" y="0" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 7px; margin-left: 226px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Configuration</div></div></div></foreignObject><text x="330" y="27" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Configuration</text></switch></g><rect x="450" y="25" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 25px; margin-left: 450px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Configuration</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">collections: Collections</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">themes: Themes</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_shapes: DataShapes</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">component_groups: ComponentGroups</p></div></div></div></foreignObject><text x="450" y="109" fill="#333333" font-family="Helvetica" font-size="12px">Configuration...</text></switch></g><rect x="670" y="25" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 25px; margin-left: 670px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Collection</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">component_groups: ComponentGroups</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">default_themes: Themes</p></div></div></div></foreignObject><text x="670" y="109" fill="#333333" font-family="Helvetica" font-size="12px">Collection...</text></switch></g><rect x="890" y="25" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 25px; margin-left: 890px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Theme</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p></div></div></div></foreignObject><text x="890" y="109" fill="#333333" font-family="Helvetica" font-size="12px">Theme...</text></switch></g><rect x="1110" y="25" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 25px; margin-left: 1110px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>DataShape</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p></div></div></div></foreignObject><text x="1110" y="109" fill="#333333" font-family="Helvetica" font-size="12px">DataShape...</text></switch></g><rect x="10" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 10px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>ComponentGroup</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">collection: Collection</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">components: Components</p></div></div></div></foreignObject><text x="10" y="289" fill="#333333" font-family="Helvetica" font-size="12px">ComponentGroup...</text></switch></g><rect x="230" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 230px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Component</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_shape: DataShape</p></div></div></div></foreignObject><text x="230" y="289" fill="#333333" font-family="Helvetica" font-size="12px">Component...</text></switch></g><path d="M 650 105 Q 650 105 667.76 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 661.88 108.5 L 668.88 105 L 661.88 101.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 650 105 Q 650 105 887.76 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 881.88 108.5 L 888.88 105 L 881.88 101.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 650 105 Q 650 105 1107.76 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1101.88 108.5 L 1108.88 105 L 1101.88 101.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 650 105 Q 660 105 660 150 Q 660 195 330 195 Q 0 195 0 240 Q 0 285 7.76 285" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1.88 288.5 L 8.88 285 L 1.88 281.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 210 285 Q 210 285 227.76 285" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 221.88 288.5 L 228.88 285 L 221.88 281.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 230 285 Q 220 285 220 240 Q 220 195 770 195 Q 1320 195 1320 150 Q 1320 105 1312.24 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1318.12 101.5 L 1311.12 105 L 1318.12 108.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 670 105 Q 660 105 660 60 Q 660 15 770 15 Q 880 15 880 105 Q 880 195 990 195 Q 1100 195 1100 150 Q 1100 105 1092.24 105" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1098.12 101.5 L 1091.12 105 L 1098.12 108.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><rect x="445" y="180" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 187px; margin-left: 446px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Schema</div></div></div></foreignObject><text x="550" y="207" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Schema</text></switch></g><rect x="670" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 670px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>WebSite</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">target_folder: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">base_collection: Collection</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">theme: Theme</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">root: Page</p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">favourite_components() : Components</p></div></div></div></foreignObject><text x="670" y="289" fill="#333333" font-family="Helvetica" font-size="12px">WebSite...</text></switch></g><rect x="890" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 890px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Page</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">sub_folder: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">level: Integer</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">pages: Pages</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">components: Components</p></div></div></div></foreignObject><text x="890" y="289" fill="#333333" font-family="Helvetica" font-size="12px">Page...</text></switch></g><rect x="1110" y="205" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 205px; margin-left: 1110px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Component</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: Symbol</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">description: String</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">component_group: ComponentGroup</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_shape: DataShape</p></div></div></div></foreignObject><text x="1110" y="289" fill="#333333" font-family="Helvetica" font-size="12px">Component...</text></switch></g><path d="M 870 285 Q 870 285 887.76 285" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 881.88 288.5 L 888.88 285 L 881.88 281.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 1090 285 Q 1090 285 1107.76 285" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1101.88 288.5 L 1108.88 285 L 1101.88 281.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 1090 285 Q 1090 285 991.75 363.6" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 994.15 357.2 L 990.87 364.3 L 998.53 362.66" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><rect x="5" y="360" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 367px; margin-left: 6px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Tailwind Generator</div></div></div></foreignObject><text x="110" y="387" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Tailwind Generator</text></switch></g><rect x="225" y="360" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 367px; margin-left: 226px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Tailwind DSL</div></div></div></foreignObject><text x="330" y="387" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Tailwind DSL</text></switch></g><rect x="450" y="385" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 385px; margin-left: 450px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>TailwindDsl</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">website()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">page()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">component()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">save()</p></div></div></div></foreignObject><text x="450" y="469" fill="#333333" font-family="Helvetica" font-size="12px">TailwindDsl...</text></switch></g><rect x="665" y="360" width="210" height="210" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 367px; margin-left: 666px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">DataBuilder</div></div></div></foreignObject><text x="770" y="387" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">DataBuilder</text></switch></g><rect x="890" y="385" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 385px; margin-left: 890px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>BaseDataBuilder</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">obj: Hash</p></div></div></div></foreignObject><text x="890" y="469" fill="#333333" font-family="Helvetica" font-size="12px">BaseDataBuilder...</text></switch></g><rect x="1130" y="385" width="160" height="160" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 162px; height: 160px; padding-top: 385px; margin-left: 1130px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 160px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><i>&lt;&lt; MixIn &gt;&gt;</i></p><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Factory</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">data()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_instance()</p></div></div></div></foreignObject><text x="1130" y="469" fill="#333333" font-family="Helvetica" font-size="12px">&lt;&lt; MixIn &gt;&gt;...</text></switch></g><rect x="5" y="560" width="210" height="210" fill="#d5e8d4" stroke="#82b366" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 567px; margin-left: 6px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Raw Component Transformers</div></div></div></foreignObject><text x="110" y="587" fill="#333333" font-family="Helvetica" font-size="20px" text-anchor="middle">Raw Component Transfo...</text></switch></g><rect x="230" y="585" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 585px; margin-left: 230px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>UiKit</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">design_systems: DesignSystem[]</p></div></div></div></foreignObject><text x="230" y="669" fill="#333333" font-family="Helvetica" font-size="12px">UiKit...</text></switch></g><rect x="450" y="585" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 585px; margin-left: 450px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>DesignSystem</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">stats: Hash</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">groups: Group[]</p></div></div></div></foreignObject><text x="450" y="669" fill="#333333" font-family="Helvetica" font-size="12px">DesignSystem...</text></switch></g><rect x="670" y="585" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 585px; margin-left: 670px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Group</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">key: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">type: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">folder: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">sub_keys: string[]</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">files: SourceFile[]</p></div></div></div></foreignObject><text x="670" y="669" fill="#333333" font-family="Helvetica" font-size="12px">Group...</text></switch></g><rect x="890" y="585" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 585px; margin-left: 890px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>SourceFile</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">name: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">file_name: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">file_name_only: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">file: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">target: TargetFile</p></div></div></div></foreignObject><text x="890" y="669" fill="#333333" font-family="Helvetica" font-size="12px">SourceFile...</text></switch></g><rect x="1110" y="585" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 585px; margin-left: 1110px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>TargetFile</b></p><hr size="1" /><p style="margin:0px;margin-left:4px;margin-bottom:4px">html_file: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">clean_html_file: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">tailwind_config_file: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">settings_file: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">data_file: string</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">astro_file: string</p></div></div></div></foreignObject><text x="1110" y="669" fill="#333333" font-family="Helvetica" font-size="12px">TargetFile...</text></switch></g><path d="M 430 665 Q 430 665 447.76 665" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 441.88 668.5 L 448.88 665 L 441.88 661.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 650 665 Q 650 665 667.76 665" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 661.88 668.5 L 668.88 665 L 661.88 661.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 870 665 Q 870 665 887.76 665" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 881.88 668.5 L 888.88 665 L 881.88 661.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><path d="M 1090 665 Q 1090 665 1107.76 665" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1101.88 668.5 L 1108.88 665 L 1101.88 661.5" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
@@ -0,0 +1,197 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TailwindDsl
4
+ module Etl
5
+ module ComponentStructures
6
+ # Raw Component Query will return a list of raw components that are available for processing
7
+ #
8
+ # This is a two pass process:
9
+ # 1. Query the raw component folder for all files that match the pattern and build up a graph with required information
10
+ # 2. Flatten the graph into a list of rows
11
+ #
12
+ # If you need to debug, then pass in the debug flag and it will output the graph to the console
13
+ class RawComponentQuery
14
+ DesignSystem = Struct.new(
15
+ :name,
16
+ :source_path,
17
+ :target_path,
18
+ keyword_init: true
19
+ )
20
+
21
+ ComponentGroup = Struct.new(
22
+ :key,
23
+ :type,
24
+ :sub_keys,
25
+ :folder,
26
+ keyword_init: true
27
+ )
28
+ ComponentInfo = Struct.new(
29
+ :source_file,
30
+ :target_html_file,
31
+ :target_clean_html_file,
32
+ :target_tailwind_config_file,
33
+ :target_settings_file,
34
+ :target_data_file,
35
+ :target_astro_file, keyword_init: true
36
+ )
37
+
38
+ class Record
39
+ attr_reader :design_system
40
+ attr_reader :component_group
41
+ attr_reader :absolute_component
42
+ attr_reader :relative_component
43
+
44
+ def initialize(design_system:, component_group:, absolute_component:, relative_component:)
45
+ @design_system = design_system
46
+ @component_group = component_group
47
+ @absolute_component = absolute_component
48
+ @relative_component = relative_component
49
+ end
50
+
51
+ def to_h
52
+ {
53
+ design_system: design_system.to_h,
54
+ component_group: component_group.to_h,
55
+ absolute_component: absolute_component.to_h,
56
+ relative_component: relative_component.to_h
57
+ }
58
+ end
59
+ end
60
+
61
+ attr_reader :uikit
62
+ attr_reader :raw_component_root_path
63
+ attr_reader :component_structure_root_path
64
+ attr_reader :current_design_system
65
+ attr_reader :debug
66
+
67
+ def initialize(uikit, **args)
68
+ @uikit = uikit
69
+ @raw_component_root_path = args[:raw_component_root_path] || raise(ArgumentError, 'Missing raw_component_root_path')
70
+ @component_structure_root_path = args[:component_structure_root_path] || raise(ArgumentError, 'Missing component_structure_root_path')
71
+ @debug = args[:debug] || false
72
+ end
73
+
74
+ class << self
75
+ def query(uikit, raw_component_root_path:, component_structure_root_path:, debug: false)
76
+ instance = new(uikit, raw_component_root_path: raw_component_root_path, component_structure_root_path: component_structure_root_path, debug: debug)
77
+ instance.call
78
+ end
79
+ end
80
+
81
+ def call
82
+ run_query
83
+ # puts JSON.pretty_generate(graph) if debug
84
+ # {
85
+ # list: list.map(&:to_h)
86
+ # }
87
+ self
88
+ end
89
+
90
+ # Flattened list of records in hash format
91
+ # @return [Array<Hash>] list
92
+ def to_h
93
+ @list.map(&:to_h)
94
+ end
95
+
96
+ # Flattened list of records
97
+ #
98
+ # @return [Array<Record>] list
99
+ def records
100
+ @list
101
+ end
102
+
103
+ # Graph hierarchy is kept in deep nested format
104
+ #
105
+ # @return [Array<Hash>] graph
106
+ def graph
107
+ return @graph if defined? @graph
108
+
109
+ @graph = build_graph
110
+ end
111
+
112
+ private
113
+
114
+ def build_graph
115
+ uikit.design_systems.map do |design_system|
116
+ @current_design_system = design_system
117
+ map_design_system
118
+ end
119
+ end
120
+
121
+ def map_design_system
122
+ {
123
+ name: current_design_system.name,
124
+ source_path: source_path,
125
+ target_path: target_path,
126
+ groups: current_design_system.groups.map do |group|
127
+ map_group(group)
128
+ end
129
+ }
130
+ end
131
+
132
+ def map_group(group)
133
+ {
134
+ key: group.key,
135
+ type: group.type,
136
+ sub_keys: group.sub_keys,
137
+ files: group.files.map do |file|
138
+ map_file(file)
139
+ end
140
+ }
141
+ end
142
+
143
+ # rubocop:disable Metrics/AbcSize
144
+ def map_file(file)
145
+ {
146
+ relative: {
147
+ source_file: file.file,
148
+ target_html_file: file.target.html_file,
149
+ target_clean_html_file: file.target.clean_html_file,
150
+ target_tailwind_config_file: file.target.tailwind_config_file,
151
+ target_settings_file: file.target.settings_file,
152
+ target_data_file: file.target.data_file,
153
+ target_astro_file: file.target.astro_file
154
+ },
155
+ absolute: {
156
+ source_file: File.join(source_path, file.file),
157
+ target_html_file: File.join(target_path, file.target.html_file),
158
+ target_clean_html_file: File.join(target_path, file.target.clean_html_file),
159
+ target_tailwind_config_file: File.join(target_path, file.target.tailwind_config_file),
160
+ target_settings_file: File.join(target_path, file.target.settings_file),
161
+ target_data_file: File.join(target_path, file.target.data_file),
162
+ target_astro_file: File.join(target_path, file.target.astro_file)
163
+ }
164
+ }
165
+ end
166
+ # rubocop:enable Metrics/AbcSize
167
+
168
+ def design_system_name
169
+ current_design_system.name
170
+ end
171
+
172
+ def source_path
173
+ File.join(raw_component_root_path, current_design_system.name)
174
+ end
175
+
176
+ def target_path
177
+ File.join(component_structure_root_path, current_design_system.name)
178
+ end
179
+
180
+ def run_query
181
+ @list = graph.flat_map do |design_system|
182
+ design_system[:groups].flat_map do |group|
183
+ group[:files].map do |file|
184
+ Record.new(
185
+ design_system: DesignSystem.new(**design_system.slice(:name, :source_path, :target_path)),
186
+ component_group: ComponentGroup.new(**group.slice(:key, :type, :sub_keys)),
187
+ absolute_component: ComponentInfo.new(**file[:absolute]),
188
+ relative_component: ComponentInfo.new(**file[:relative])
189
+ )
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
197
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TailwindDsl
4
- VERSION = '0.0.10'
4
+ VERSION = '0.0.11'
5
5
  end
data/lib/tailwind_dsl.rb CHANGED
@@ -16,6 +16,7 @@ require_relative 'tailwind_dsl/etl/raw_components/schema/design_system'
16
16
  require_relative 'tailwind_dsl/etl/raw_components/schema/uikit'
17
17
 
18
18
  require_relative 'tailwind_dsl/etl/component_structures/data'
19
+ require_relative 'tailwind_dsl/etl/component_structures/raw_component_query'
19
20
  require_relative 'tailwind_dsl/etl/component_structures/generator'
20
21
  # require_relative 'tailwind_dsl/astro_demo/generate_astro_page_data'
21
22
 
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "tailwind_dsl",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "tailwind_dsl",
9
- "version": "0.0.10",
9
+ "version": "0.0.11",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.1",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwind_dsl",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "Tailwind DSL will build tailwind websites useing Domain Specific Language conventions",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tailwind_dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-13 00:00:00.000000000 Z
11
+ date: 2022-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmdlet
@@ -139,54 +139,6 @@ files:
139
139
  - ".components/tui/application-ui/application-shells/stacked/09.html"
140
140
  - ".components/tui/application-ui/application-shells/stacked/09.settings.json"
141
141
  - ".components/tui/application-ui/application-shells/stacked/09.tailwind.config.js"
142
- - ".components/tui/application-ui/component/data-display/calendar/01.clean.html"
143
- - ".components/tui/application-ui/component/data-display/calendar/01.html"
144
- - ".components/tui/application-ui/component/data-display/calendar/01.settings.json"
145
- - ".components/tui/application-ui/component/data-display/calendar/02.clean.html"
146
- - ".components/tui/application-ui/component/data-display/calendar/02.html"
147
- - ".components/tui/application-ui/component/data-display/calendar/02.settings.json"
148
- - ".components/tui/application-ui/component/data-display/calendar/03.clean.html"
149
- - ".components/tui/application-ui/component/data-display/calendar/03.html"
150
- - ".components/tui/application-ui/component/data-display/calendar/03.settings.json"
151
- - ".components/tui/application-ui/component/data-display/calendar/04.clean.html"
152
- - ".components/tui/application-ui/component/data-display/calendar/04.html"
153
- - ".components/tui/application-ui/component/data-display/calendar/04.settings.json"
154
- - ".components/tui/application-ui/component/data-display/calendar/05.clean.html"
155
- - ".components/tui/application-ui/component/data-display/calendar/05.html"
156
- - ".components/tui/application-ui/component/data-display/calendar/05.settings.json"
157
- - ".components/tui/application-ui/component/data-display/calendar/06.clean.html"
158
- - ".components/tui/application-ui/component/data-display/calendar/06.html"
159
- - ".components/tui/application-ui/component/data-display/calendar/06.settings.json"
160
- - ".components/tui/application-ui/component/data-display/calendar/07.clean.html"
161
- - ".components/tui/application-ui/component/data-display/calendar/07.html"
162
- - ".components/tui/application-ui/component/data-display/calendar/07.settings.json"
163
- - ".components/tui/application-ui/component/data-display/calendar/08.clean.html"
164
- - ".components/tui/application-ui/component/data-display/calendar/08.html"
165
- - ".components/tui/application-ui/component/data-display/calendar/08.settings.json"
166
- - ".components/tui/application-ui/component/data-display/description-list/01.clean.html"
167
- - ".components/tui/application-ui/component/data-display/description-list/01.html"
168
- - ".components/tui/application-ui/component/data-display/description-list/01.settings.json"
169
- - ".components/tui/application-ui/component/data-display/description-list/02.clean.html"
170
- - ".components/tui/application-ui/component/data-display/description-list/02.html"
171
- - ".components/tui/application-ui/component/data-display/description-list/02.settings.json"
172
- - ".components/tui/application-ui/component/data-display/description-list/03.clean.html"
173
- - ".components/tui/application-ui/component/data-display/description-list/03.html"
174
- - ".components/tui/application-ui/component/data-display/description-list/03.settings.json"
175
- - ".components/tui/application-ui/component/data-display/description-list/04.clean.html"
176
- - ".components/tui/application-ui/component/data-display/description-list/04.html"
177
- - ".components/tui/application-ui/component/data-display/description-list/04.settings.json"
178
- - ".components/tui/application-ui/component/data-display/description-list/05.clean.html"
179
- - ".components/tui/application-ui/component/data-display/description-list/05.html"
180
- - ".components/tui/application-ui/component/data-display/description-list/05.settings.json"
181
- - ".components/tui/application-ui/component/data-display/stats/01.clean.html"
182
- - ".components/tui/application-ui/component/data-display/stats/01.html"
183
- - ".components/tui/application-ui/component/data-display/stats/01.settings.json"
184
- - ".components/tui/application-ui/component/data-display/stats/02.clean.html"
185
- - ".components/tui/application-ui/component/data-display/stats/02.html"
186
- - ".components/tui/application-ui/component/data-display/stats/02.settings.json"
187
- - ".components/tui/application-ui/component/data-display/stats/03.clean.html"
188
- - ".components/tui/application-ui/component/data-display/stats/03.html"
189
- - ".components/tui/application-ui/component/data-display/stats/03.settings.json"
190
142
  - ".components/tui/application-ui/component/element/avatars/01.clean.html"
191
143
  - ".components/tui/application-ui/component/element/avatars/01.html"
192
144
  - ".components/tui/application-ui/component/element/avatars/01.settings.json"
@@ -2201,6 +2153,7 @@ files:
2201
2153
  - lib/tailwind_dsl/astro_demo/generate_astro_page_data.rb
2202
2154
  - lib/tailwind_dsl/etl/component_structures/data.rb
2203
2155
  - lib/tailwind_dsl/etl/component_structures/generator.rb
2156
+ - lib/tailwind_dsl/etl/component_structures/raw_component_query.rb
2204
2157
  - lib/tailwind_dsl/etl/element.rb
2205
2158
  - lib/tailwind_dsl/etl/raw_components/director.rb
2206
2159
  - lib/tailwind_dsl/etl/raw_components/schema/design_system.rb