tailwind_dsl 0.0.10 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) 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 +14 -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/generator.rb +59 -65
  9. data/lib/tailwind_dsl/etl/component_structures/raw_component_query.rb +174 -0
  10. data/lib/tailwind_dsl/version.rb +1 -1
  11. data/lib/tailwind_dsl.rb +1 -1
  12. data/package-lock.json +2 -2
  13. data/package.json +1 -1
  14. metadata +3 -51
  15. data/.components/tui/application-ui/component/data-display/calendar/01.clean.html +0 -204
  16. data/.components/tui/application-ui/component/data-display/calendar/01.html +0 -243
  17. data/.components/tui/application-ui/component/data-display/calendar/01.settings.json +0 -9
  18. data/.components/tui/application-ui/component/data-display/calendar/02.clean.html +0 -496
  19. data/.components/tui/application-ui/component/data-display/calendar/02.html +0 -551
  20. data/.components/tui/application-ui/component/data-display/calendar/02.settings.json +0 -9
  21. data/.components/tui/application-ui/component/data-display/calendar/03.clean.html +0 -240
  22. data/.components/tui/application-ui/component/data-display/calendar/03.html +0 -274
  23. data/.components/tui/application-ui/component/data-display/calendar/03.settings.json +0 -9
  24. data/.components/tui/application-ui/component/data-display/calendar/04.clean.html +0 -385
  25. data/.components/tui/application-ui/component/data-display/calendar/04.html +0 -439
  26. data/.components/tui/application-ui/component/data-display/calendar/04.settings.json +0 -9
  27. data/.components/tui/application-ui/component/data-display/calendar/05.clean.html +0 -211
  28. data/.components/tui/application-ui/component/data-display/calendar/05.html +0 -254
  29. data/.components/tui/application-ui/component/data-display/calendar/05.settings.json +0 -9
  30. data/.components/tui/application-ui/component/data-display/calendar/06.clean.html +0 -320
  31. data/.components/tui/application-ui/component/data-display/calendar/06.html +0 -336
  32. data/.components/tui/application-ui/component/data-display/calendar/06.settings.json +0 -9
  33. data/.components/tui/application-ui/component/data-display/calendar/07.clean.html +0 -266
  34. data/.components/tui/application-ui/component/data-display/calendar/07.html +0 -294
  35. data/.components/tui/application-ui/component/data-display/calendar/07.settings.json +0 -9
  36. data/.components/tui/application-ui/component/data-display/calendar/08.clean.html +0 -268
  37. data/.components/tui/application-ui/component/data-display/calendar/08.html +0 -296
  38. data/.components/tui/application-ui/component/data-display/calendar/08.settings.json +0 -9
  39. data/.components/tui/application-ui/component/data-display/description-list/01.clean.html +0 -59
  40. data/.components/tui/application-ui/component/data-display/description-list/01.html +0 -61
  41. data/.components/tui/application-ui/component/data-display/description-list/01.settings.json +0 -9
  42. data/.components/tui/application-ui/component/data-display/description-list/02.clean.html +0 -59
  43. data/.components/tui/application-ui/component/data-display/description-list/02.html +0 -61
  44. data/.components/tui/application-ui/component/data-display/description-list/02.settings.json +0 -9
  45. data/.components/tui/application-ui/component/data-display/description-list/03.clean.html +0 -86
  46. data/.components/tui/application-ui/component/data-display/description-list/03.html +0 -88
  47. data/.components/tui/application-ui/component/data-display/description-list/03.settings.json +0 -9
  48. data/.components/tui/application-ui/component/data-display/description-list/04.clean.html +0 -59
  49. data/.components/tui/application-ui/component/data-display/description-list/04.html +0 -61
  50. data/.components/tui/application-ui/component/data-display/description-list/04.settings.json +0 -9
  51. data/.components/tui/application-ui/component/data-display/description-list/05.clean.html +0 -59
  52. data/.components/tui/application-ui/component/data-display/description-list/05.html +0 -61
  53. data/.components/tui/application-ui/component/data-display/description-list/05.settings.json +0 -9
  54. data/.components/tui/application-ui/component/data-display/stats/01.clean.html +0 -17
  55. data/.components/tui/application-ui/component/data-display/stats/01.html +0 -19
  56. data/.components/tui/application-ui/component/data-display/stats/01.settings.json +0 -9
  57. data/.components/tui/application-ui/component/data-display/stats/02.clean.html +0 -80
  58. data/.components/tui/application-ui/component/data-display/stats/02.html +0 -89
  59. data/.components/tui/application-ui/component/data-display/stats/02.settings.json +0 -9
  60. data/.components/tui/application-ui/component/data-display/stats/03.clean.html +0 -53
  61. data/.components/tui/application-ui/component/data-display/stats/03.html +0 -61
  62. data/.components/tui/application-ui/component/data-display/stats/03.settings.json +0 -9
  63. data/lib/tailwind_dsl/etl/component_structures/data.rb +0 -55
@@ -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>
@@ -20,73 +20,71 @@ module TailwindDsl
20
20
 
21
21
  # .gsub(/(\n\s*\n)+/, "\n")
22
22
  attr_reader :uikit
23
- attr_reader :root_raw_component_path
24
- attr_reader :root_target_path
23
+ attr_reader :source_root_path
24
+ attr_reader :target_root_path
25
25
  attr_reader :reset_root_path
26
26
 
27
- def initialize(uikit, root_raw_component_path, root_target_path, reset_root_path: false)
27
+ def initialize(uikit, source_root_path, target_root_path, reset_root_path: false)
28
28
  @uikit = uikit
29
- @root_raw_component_path = root_raw_component_path
30
- @root_target_path = root_target_path
29
+ @source_root_path = source_root_path
30
+ @target_root_path = target_root_path
31
31
  @reset_root_path = reset_root_path
32
32
  end
33
33
 
34
34
  def generate
35
- assert_root_target_path_exists
35
+ assert_target_root_path_exists
36
36
 
37
37
  delete_target_root_path if reset_root_path
38
38
 
39
- uikit.design_systems.each do |design_system|
40
- process_design_system(design_system)
41
- end
39
+ @components = query_components
40
+
41
+ process_components
42
42
  end
43
43
 
44
44
  private
45
45
 
46
- def assert_root_target_path_exists
47
- raise 'Target path does not exist' unless Dir.exist?(root_target_path)
46
+ def assert_target_root_path_exists
47
+ raise 'Target path does not exist' unless Dir.exist?(target_root_path)
48
48
  end
49
49
 
50
50
  def delete_target_root_path
51
- FileUtils.rm_rf(Dir.glob("#{root_target_path}/*"))
51
+ FileUtils.rm_rf(Dir.glob("#{target_root_path}/*"))
52
52
  end
53
53
 
54
- def process_design_system(design_system)
55
- design_system_name = design_system.name
56
- design_system.groups.each do |group|
57
- process_group(design_system_name, group)
58
- end
54
+ def query_components
55
+ RawComponentQuery.query(uikit,
56
+ raw_component_root_path: source_root_path,
57
+ component_structure_root_path: target_root_path).records
59
58
  end
60
59
 
61
- def process_group(design_system_name, group)
62
- group.files.each do |file|
63
- # puts "DSN: #{design_system_name}, GRP: #{group.type}, FILE: #{file.file}"
64
- data = Data.new(design_system_name, group, file, root_raw_component_path)
65
-
66
- unless data.source.exist?
67
- puts "Source file does not exist: #{data.source.file}"
60
+ def process_components
61
+ @components.each do |component|
62
+ unless File.exist?(component.absolute_path.source_file)
63
+ puts "Source file does not exist: #{component.absolute_path.source_file}"
68
64
  next
69
65
  end
70
66
 
71
- process_component(data)
67
+ # puts "DSN: #{component.design_system.name}, GRP: #{component.group.type}, FILE: #{component.relative_path.source_file}"
68
+
69
+ process_component(component)
72
70
  end
73
71
  end
74
72
 
75
- def process_component(data)
73
+ def process_component(component)
76
74
  # Create a folder for the component
77
- make_target_folder(data)
75
+ make_target_folder(component)
78
76
 
79
- # Create a HTML file for each component
80
- create_html_file(data)
77
+ # # Create a HTML file for each component
78
+ create_html_file(component)
81
79
 
82
- # Create a clean HTML file for each component (comments removed)
83
- create_clean_html_file(data)
80
+ # # Create a clean HTML file for each component (comments removed)
81
+ create_clean_html_file(component)
84
82
 
85
- # Create a tailwind config file (if one exists) - look in first comment for the ``` ```
86
- create_tailwind_config_file(data)
83
+ # # Create a tailwind config file (if one exists) - look in first comment for the ``` ```
84
+ create_tailwind_config_file(component)
87
85
 
88
- # Create a settings file after extracting information from the HTML file
89
- create_settings_file(data)
86
+ # # Create a settings file after extracting information from the HTML file
87
+ create_settings_file(component)
90
88
 
91
89
  # Build a menu of sources
92
90
  # see: https://tailwindui.com/components/application-ui/data-display/description-lists
@@ -104,42 +102,38 @@ module TailwindDsl
104
102
  # Note that the data file is meant to represent the data in the raw component
105
103
  # Write an Astro file
106
104
 
107
- def target_path(data)
108
- File.join(root_target_path, data.design_system_name, data.target.folder)
109
- end
110
-
111
- def target_file(data, file)
112
- File.join(root_target_path, data.design_system_name, file)
105
+ def target_path(component)
106
+ File.join(target_root_path, component.design_system.name, component.group.folder)
113
107
  end
114
108
 
115
- def make_target_folder(data)
116
- FileUtils.mkdir_p(target_path(data))
109
+ def make_target_folder(component)
110
+ FileUtils.mkdir_p(target_path(component))
117
111
  end
118
112
 
119
- def create_html_file(data)
113
+ def create_html_file(component)
120
114
  # rules:
121
115
  # if the html file exists, then read the settings file, if the settings has html overwrite, then overwrite the html file
122
116
  # overwrite = true
123
- FileUtils.cp_r(data.source.file, target_file(data, data.target.html_file), remove_destination: true) # if overwrite
117
+ FileUtils.cp_r(component.absolute_path.source_file, component.absolute_path.target_html_file, remove_destination: true) # if overwrite
124
118
  end
125
119
 
126
- def create_clean_html_file(data)
127
- html = data.source.content || ''
128
- data.captured_comment_list = html.scan(COMMENT_REGEX)
129
- data.captured_comment_text = data.captured_comment_list.join("\n")
120
+ def create_clean_html_file(component)
121
+ html = File.read(component.absolute_path.source_file) || ''
122
+ component.captured_comment_list = html.scan(COMMENT_REGEX)
123
+ component.captured_comment_text = component.captured_comment_list.join("\n")
130
124
 
131
125
  html = html.gsub(COMMENT_REGEX, '').gsub(BLANK_LINE_REGEX, "\n").lstrip
132
126
 
133
- File.write(target_file(data, data.target.clean_html_file), html)
127
+ File.write(component.absolute_path.target_clean_html_file, html)
134
128
  end
135
129
 
136
- def create_tailwind_config_file(data)
137
- data.captured_tailwind_config = extract_tailwind_config(data)
130
+ def create_tailwind_config_file(component)
131
+ component.captured_tailwind_config = extract_tailwind_config(component)
138
132
 
139
- File.write(target_file(data, data.target.tailwind_config_file), data.captured_tailwind_config) if data.captured_tailwind_config
133
+ File.write(component.absolute_path.target_tailwind_config_file, component.captured_tailwind_config) if component.captured_tailwind_config
140
134
  end
141
135
 
142
- def create_settings_file(data)
136
+ def create_settings_file(component)
143
137
  # CUSTOM
144
138
  # templates/tailwind/tui/ecommerce/page/product-pages/02.html
145
139
  # templates/tailwind/tui/ecommerce/components/product-overviews/04.html
@@ -164,31 +158,31 @@ module TailwindDsl
164
158
  # templates/tailwind/tui/application-ui/page/home-screens/02.html
165
159
  # templates/tailwind/tui/application-ui/component/list/feed/03.html
166
160
  settings = {
167
- source: extract_source(data),
161
+ source: extract_source(component),
168
162
  custom_html: {
169
- html: data.captured_comment_text.match(/<html.*>/),
170
- body: data.captured_comment_text.match(/<body.*>/)
163
+ html: component.captured_comment_text.match(/<html.*>/),
164
+ body: component.captured_comment_text.match(/<body.*>/)
171
165
  },
172
- tailwind_config: tailwind_config_settings(data.captured_tailwind_config)
166
+ tailwind_config: tailwind_config_settings(component.captured_tailwind_config)
173
167
  }
174
168
 
175
- File.write(target_file(data, data.target.settings_file), JSON.pretty_generate(settings))
169
+ File.write(component.absolute_path.target_settings_file, JSON.pretty_generate(settings))
176
170
  end
177
171
 
178
- def extract_tailwind_config(data)
179
- return nil if data.captured_comment_list.length.zero? || !data.captured_comment_list.first.include?('// tailwind.config.js')
172
+ def extract_tailwind_config(component)
173
+ return nil if component.captured_comment_list.length.zero? || !component.captured_comment_list.first.include?('// tailwind.config.js')
180
174
 
181
- data.captured_comment_list.first.match(TAILWIND_CONFIG_REGEX)[:tailwind]
175
+ component.captured_comment_list.first.match(TAILWIND_CONFIG_REGEX)[:tailwind]
182
176
  end
183
177
 
184
- def extract_source(data)
178
+ def extract_source(component)
185
179
  # In future I may be able to store the source in a comment in the HTML file
186
180
  # but at the moment all components are generally from TailwindUI and the source
187
181
  # URL can be inferred from the sub keys.
188
182
 
189
- return "https://tailwindui.com/components/#{data.group.sub_keys.join('/')}" if data.design_system_name == 'tui'
183
+ return "https://tailwindui.com/components/#{component.group.sub_keys.join('/')}" if component.design_system.name == 'tui'
190
184
 
191
- "##{data.design_system_name}/#{data.group.sub_keys.join('/')}"
185
+ "##{component.design_system.name}/#{component.group.sub_keys.join('/')}"
192
186
  end
193
187
 
194
188
  def tailwind_config_settings(raw_tailwind_config)
@@ -0,0 +1,174 @@
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
+ Group = Struct.new(
22
+ :key,
23
+ :type,
24
+ :sub_keys,
25
+ :folder,
26
+ keyword_init: true
27
+ )
28
+ FilePath = 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 :group
41
+ attr_reader :absolute_path
42
+ attr_reader :relative_path
43
+
44
+ # Storage buckets for data that is extracted from the source file
45
+ attr_accessor :captured_comment_text
46
+ attr_accessor :captured_comment_list
47
+ attr_accessor :captured_tailwind_config
48
+
49
+ def initialize(design_system:, group:, absolute_path:, relative_path:)
50
+ @design_system = design_system
51
+ @group = group
52
+ @absolute_path = absolute_path
53
+ @relative_path = relative_path
54
+ end
55
+
56
+ def to_h
57
+ {
58
+ design_system: design_system.to_h,
59
+ group: group.to_h,
60
+ absolute_path: absolute_path.to_h,
61
+ relative_path: relative_path.to_h
62
+ }
63
+ end
64
+ end
65
+
66
+ attr_reader :uikit
67
+ attr_reader :raw_component_root_path
68
+ attr_reader :component_structure_root_path
69
+ attr_reader :current_design_system
70
+ attr_reader :debug
71
+ attr_reader :records
72
+
73
+ def initialize(uikit, **args)
74
+ @uikit = uikit
75
+ @raw_component_root_path = args[:raw_component_root_path] || raise(ArgumentError, 'Missing raw_component_root_path')
76
+ @component_structure_root_path = args[:component_structure_root_path] || raise(ArgumentError, 'Missing component_structure_root_path')
77
+ @debug = args[:debug] || false
78
+ end
79
+
80
+ class << self
81
+ def query(uikit, raw_component_root_path:, component_structure_root_path:, debug: false)
82
+ instance = new(uikit, raw_component_root_path: raw_component_root_path, component_structure_root_path: component_structure_root_path, debug: debug)
83
+ instance.call
84
+ end
85
+ end
86
+
87
+ def call
88
+ @records = build_records
89
+
90
+ self
91
+ end
92
+
93
+ # Flattened list of records in hash format
94
+ # @return [Array<Hash>] list
95
+ def to_h
96
+ records.map(&:to_h)
97
+ end
98
+
99
+ private
100
+
101
+ def build_records
102
+ uikit.design_systems.flat_map do |design_system|
103
+ @current_design_system = design_system
104
+ design_system.groups.flat_map do |group|
105
+ group.files.map do |file|
106
+ Record.new(
107
+ design_system: DesignSystem.new(**map_design_system),
108
+ group: Group.new(**map_group(group)),
109
+ absolute_path: FilePath.new(**map_absolute_file(file)),
110
+ relative_path: FilePath.new(**map_relative_file(file))
111
+ )
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ def design_system_name
118
+ current_design_system.name
119
+ end
120
+
121
+ def source_path
122
+ File.join(raw_component_root_path, design_system_name)
123
+ end
124
+
125
+ def target_path
126
+ File.join(component_structure_root_path, design_system_name)
127
+ end
128
+
129
+ def map_design_system
130
+ {
131
+ name: design_system_name,
132
+ source_path: source_path,
133
+ target_path: target_path
134
+ }
135
+ end
136
+
137
+ def map_group(group)
138
+ {
139
+ key: group.key,
140
+ type: group.type,
141
+ sub_keys: group.sub_keys,
142
+ folder: group.folder
143
+ }
144
+ end
145
+
146
+ def map_relative_file(file)
147
+ {
148
+ source_file: file.file,
149
+ target_html_file: file.target.html_file,
150
+ target_clean_html_file: file.target.clean_html_file,
151
+ target_tailwind_config_file: file.target.tailwind_config_file,
152
+ target_settings_file: file.target.settings_file,
153
+ target_data_file: file.target.data_file,
154
+ target_astro_file: file.target.astro_file
155
+ }
156
+ end
157
+
158
+ # rubocop:disable Metrics/AbcSize
159
+ def map_absolute_file(file)
160
+ {
161
+ source_file: File.join(source_path, file.file),
162
+ target_html_file: File.join(target_path, file.target.html_file),
163
+ target_clean_html_file: File.join(target_path, file.target.clean_html_file),
164
+ target_tailwind_config_file: File.join(target_path, file.target.tailwind_config_file),
165
+ target_settings_file: File.join(target_path, file.target.settings_file),
166
+ target_data_file: File.join(target_path, file.target.data_file),
167
+ target_astro_file: File.join(target_path, file.target.astro_file)
168
+ }
169
+ end
170
+ # rubocop:enable Metrics/AbcSize
171
+ end
172
+ end
173
+ end
174
+ 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.12'
5
5
  end
data/lib/tailwind_dsl.rb CHANGED
@@ -15,7 +15,7 @@ require_relative 'tailwind_dsl/etl/raw_components/schema/group'
15
15
  require_relative 'tailwind_dsl/etl/raw_components/schema/design_system'
16
16
  require_relative 'tailwind_dsl/etl/raw_components/schema/uikit'
17
17
 
18
- require_relative 'tailwind_dsl/etl/component_structures/data'
18
+ require_relative 'tailwind_dsl/etl/component_structures/raw_component_query'
19
19
  require_relative 'tailwind_dsl/etl/component_structures/generator'
20
20
  # require_relative 'tailwind_dsl/astro_demo/generate_astro_page_data'
21
21