archetype 0.0.1.pre.13 → 1.0.0.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +97 -24
  3. data/README.md +11 -5
  4. data/VERSION +1 -0
  5. data/lib/archetype.rb +30 -18
  6. data/lib/archetype/actions/migrate.rb +152 -0
  7. data/lib/archetype/actions/theme.rb +6 -7
  8. data/lib/archetype/executor.rb +21 -7
  9. data/lib/archetype/extensions.rb +57 -0
  10. data/lib/archetype/functions.rb +2 -3
  11. data/lib/archetype/functions/css.rb +70 -0
  12. data/lib/archetype/functions/css/constants.rb +247 -0
  13. data/lib/archetype/functions/css/helpers.rb +265 -0
  14. data/lib/archetype/functions/css/routers.rb +28 -0
  15. data/lib/archetype/functions/css/routers/animation.rb +55 -0
  16. data/lib/archetype/functions/css/routers/background.rb +38 -0
  17. data/lib/archetype/functions/css/routers/border.rb +151 -0
  18. data/lib/archetype/functions/css/routers/list.rb +63 -0
  19. data/lib/archetype/functions/css/routers/margin_padding.rb +40 -0
  20. data/lib/archetype/functions/css/routers/outline.rb +56 -0
  21. data/lib/archetype/functions/css/routers/overflow.rb +11 -0
  22. data/lib/archetype/functions/css/routers/target.rb +38 -0
  23. data/lib/archetype/functions/css/routers/transition.rb +48 -0
  24. data/lib/archetype/functions/css/shorthands.rb +43 -0
  25. data/lib/archetype/functions/css/shorthands/animation.rb +18 -0
  26. data/lib/archetype/functions/css/shorthands/background.rb +68 -0
  27. data/lib/archetype/functions/css/shorthands/border.rb +102 -0
  28. data/lib/archetype/functions/hash.rb +3 -149
  29. data/lib/archetype/functions/hash/extend.rb +74 -0
  30. data/lib/archetype/functions/hash/shim.rb +48 -0
  31. data/lib/archetype/functions/helpers.rb +231 -22
  32. data/lib/archetype/functions/styleguide_memoizer.rb +18 -1
  33. data/lib/archetype/sass_extensions.rb +1 -3
  34. data/lib/archetype/sass_extensions/functions.rb +15 -1
  35. data/lib/archetype/sass_extensions/functions/environment.rb +152 -1
  36. data/lib/archetype/sass_extensions/functions/lists.rb +95 -45
  37. data/lib/archetype/sass_extensions/functions/locale.rb +107 -28
  38. data/lib/archetype/sass_extensions/functions/numbers.rb +118 -4
  39. data/lib/archetype/sass_extensions/functions/strings.rb +53 -0
  40. data/lib/archetype/sass_extensions/functions/styleguide.rb +43 -375
  41. data/lib/archetype/sass_extensions/functions/styleguide/components.rb +25 -0
  42. data/lib/archetype/sass_extensions/functions/styleguide/constants.rb +27 -0
  43. data/lib/archetype/sass_extensions/functions/styleguide/grammar.rb +80 -0
  44. data/lib/archetype/sass_extensions/functions/styleguide/helpers.rb +36 -0
  45. data/lib/archetype/sass_extensions/functions/styleguide/resolve.rb +159 -0
  46. data/lib/archetype/sass_extensions/functions/styleguide/styles.rb +146 -0
  47. data/lib/archetype/sass_extensions/functions/styleguide/themes.rb +40 -0
  48. data/lib/archetype/sass_extensions/functions/ui.rb +7 -57
  49. data/lib/archetype/sass_extensions/functions/ui/glyphs.rb +118 -0
  50. data/lib/archetype/sass_extensions/functions/ui/scopes.rb +96 -0
  51. data/lib/archetype/sass_extensions/functions/util.rb +14 -0
  52. data/lib/archetype/sass_extensions/functions/util/debug.rb +22 -0
  53. data/lib/archetype/sass_extensions/functions/util/hacks.rb +44 -0
  54. data/lib/archetype/sass_extensions/functions/util/images.rb +132 -0
  55. data/lib/archetype/sass_extensions/functions/util/misc.rb +220 -0
  56. data/lib/archetype/sass_extensions/functions/util/spacing.rb +83 -0
  57. data/lib/archetype/sass_extensions/functions/version.rb +12 -17
  58. data/lib/archetype/version.rb +1 -1
  59. data/stylesheets/archetype/_config.scss +1 -389
  60. data/stylesheets/archetype/_core.scss +15 -0
  61. data/stylesheets/archetype/_hacks.scss +4 -120
  62. data/stylesheets/archetype/_init.scss +4 -22
  63. data/stylesheets/archetype/_required.scss +3 -0
  64. data/stylesheets/archetype/_reset.scss +3 -0
  65. data/stylesheets/archetype/_styleguide.scss +2 -6
  66. data/stylesheets/archetype/_ui.scss +2 -358
  67. data/stylesheets/archetype/_util.scss +3 -10
  68. data/stylesheets/archetype/config/_core.scss +14 -0
  69. data/stylesheets/archetype/config/_environment.scss +19 -0
  70. data/stylesheets/archetype/config/_formatting.scss +63 -0
  71. data/stylesheets/archetype/config/_glyphs.scss +252 -0
  72. data/stylesheets/archetype/config/_resets.scss +7 -0
  73. data/stylesheets/archetype/config/_resolution.scss +3 -0
  74. data/stylesheets/archetype/config/_spacing.scss +5 -0
  75. data/stylesheets/archetype/config/_targeting.scss +18 -0
  76. data/stylesheets/archetype/config/_theme.scss +3 -0
  77. data/stylesheets/archetype/config/_typography.scss +56 -0
  78. data/stylesheets/archetype/config/_units.scss +2 -0
  79. data/stylesheets/archetype/config/_vars.scss +10 -0
  80. data/stylesheets/archetype/hacks/_core.scss +4 -0
  81. data/stylesheets/archetype/hacks/_hacks.scss +160 -0
  82. data/stylesheets/archetype/hacks/_init.scss +2 -0
  83. data/stylesheets/archetype/styleguide/_core.scss +4 -0
  84. data/stylesheets/archetype/styleguide/_init.scss +1 -0
  85. data/stylesheets/archetype/styleguide/_styleguide.scss +41 -18
  86. data/stylesheets/archetype/ui/_accessibility.scss +41 -0
  87. data/stylesheets/archetype/ui/_breakpoints.scss +19 -0
  88. data/stylesheets/archetype/ui/_core.scss +10 -0
  89. data/stylesheets/archetype/ui/_elements.scss +98 -0
  90. data/stylesheets/archetype/ui/_glyphs.scss +244 -0
  91. data/stylesheets/archetype/ui/_init.scss +5 -0
  92. data/stylesheets/archetype/ui/_layout.scss +37 -0
  93. data/stylesheets/archetype/ui/_locale.scss +12 -0
  94. data/stylesheets/archetype/ui/_scopes.scss +42 -0
  95. data/stylesheets/archetype/util/_core.scss +8 -0
  96. data/stylesheets/archetype/util/_debug.scss +9 -21
  97. data/stylesheets/archetype/util/_init.scss +1 -0
  98. data/stylesheets/archetype/util/_misc.scss +21 -86
  99. data/stylesheets/archetype/util/_spacing.scss +9 -40
  100. data/stylesheets/archetype/util/_styles.scss +189 -178
  101. data/stylesheets/archetype/util/_targeting.scss +51 -68
  102. data/templates/example/manifest.rb +2 -2
  103. data/templates/example/screen.scss +0 -1
  104. data/templates/project/manifest.rb +3 -8
  105. metadata +93 -263
  106. data/bin/archetype +0 -3
  107. data/lib/archetype/sass_extensions/monkey_patches.rb +0 -3
  108. data/lib/archetype/sass_extensions/monkey_patches/handle_include_loop.rb +0 -13
  109. data/stylesheets/archetype/_base.scss +0 -54
  110. data/stylesheets/archetype/_grid.scss +0 -3
  111. data/stylesheets/archetype/base/_h5bp.scss +0 -307
  112. data/stylesheets/archetype/base/_hybrid.scss +0 -25
  113. data/stylesheets/archetype/base/_normalize.scss +0 -634
  114. data/stylesheets/archetype/base/_reset.scss +0 -72
  115. data/stylesheets/archetype/grid/_config.scss +0 -14
  116. data/stylesheets/archetype/grid/_grid.scss +0 -391
  117. data/stylesheets/archetype/styleguide/_components.scss +0 -25
  118. data/stylesheets/archetype/styleguide/_helpers.scss +0 -215
  119. data/stylesheets/archetype/styleguide/_primitives.scss +0 -10
  120. data/stylesheets/archetype/styleguide/components/_alerts.scss +0 -59
  121. data/stylesheets/archetype/styleguide/components/_annotations.scss +0 -27
  122. data/stylesheets/archetype/styleguide/components/_bristol.scss +0 -15
  123. data/stylesheets/archetype/styleguide/components/_button_groups.scss +0 -47
  124. data/stylesheets/archetype/styleguide/components/_button_toolbars.scss +0 -17
  125. data/stylesheets/archetype/styleguide/components/_buttons.scss +0 -339
  126. data/stylesheets/archetype/styleguide/components/_canvas.scss +0 -15
  127. data/stylesheets/archetype/styleguide/components/_carets.scss +0 -336
  128. data/stylesheets/archetype/styleguide/components/_closes.scss +0 -63
  129. data/stylesheets/archetype/styleguide/components/_container.scss +0 -27
  130. data/stylesheets/archetype/styleguide/components/_copy.scss +0 -85
  131. data/stylesheets/archetype/styleguide/components/_flyouts.scss +0 -52
  132. data/stylesheets/archetype/styleguide/components/_headings.scss +0 -33
  133. data/stylesheets/archetype/styleguide/components/_headlines.scss +0 -64
  134. data/stylesheets/archetype/styleguide/components/_hovercards.scss +0 -27
  135. data/stylesheets/archetype/styleguide/components/_icons.scss +0 -17
  136. data/stylesheets/archetype/styleguide/components/_identities.scss +0 -34
  137. data/stylesheets/archetype/styleguide/components/_links.scss +0 -68
  138. data/stylesheets/archetype/styleguide/components/_loaders.scss +0 -154
  139. data/stylesheets/archetype/styleguide/components/_menu_items.scss +0 -31
  140. data/stylesheets/archetype/styleguide/components/_module.scss +0 -15
  141. data/stylesheets/archetype/styleguide/components/_pullquotes.scss +0 -29
  142. data/stylesheets/archetype/styleguide/components/_punchcut.scss +0 -18
  143. data/stylesheets/archetype/styleguide/components/_tooltips.scss +0 -28
  144. data/stylesheets/archetype/styleguide/primitives/_animations.scss +0 -17
  145. data/stylesheets/archetype/styleguide/primitives/_dimensions.scss +0 -50
  146. data/stylesheets/archetype/styleguide/primitives/_glyphs.scss +0 -11
  147. data/stylesheets/archetype/styleguide/primitives/_misc.scss +0 -8
  148. data/stylesheets/archetype/styleguide/primitives/_palettes.scss +0 -94
  149. data/stylesheets/archetype/styleguide/primitives/_shadows.scss +0 -23
  150. data/stylesheets/archetype/styleguide/primitives/_sprites.scss +0 -46
  151. data/stylesheets/archetype/styleguide/primitives/_textures.scss +0 -10
  152. data/stylesheets/archetype/styleguide/primitives/_typography.scss +0 -56
  153. data/stylesheets/archetype/util/_lists.scss +0 -57
  154. data/stylesheets/archetype/util/_rtl.scss +0 -279
  155. data/stylesheets/archetype/util/_units.scss +0 -18
  156. data/templates/project/screen.scss +0 -1
  157. data/templates/project/vendor/archetype/animations/loaders/large/large.png +0 -0
  158. data/templates/project/vendor/archetype/animations/loaders/large/large_dark.png +0 -0
  159. data/templates/project/vendor/archetype/animations/loaders/large/large_dark_static.png +0 -0
  160. data/templates/project/vendor/archetype/animations/loaders/large/large_static.png +0 -0
  161. data/templates/project/vendor/archetype/animations/loaders/medium/medium.png +0 -0
  162. data/templates/project/vendor/archetype/animations/loaders/medium/medium_dark.png +0 -0
  163. data/templates/project/vendor/archetype/animations/loaders/medium/medium_dark_static.png +0 -0
  164. data/templates/project/vendor/archetype/animations/loaders/medium/medium_static.png +0 -0
  165. data/templates/project/vendor/archetype/animations/loaders/small/small.png +0 -0
  166. data/templates/project/vendor/archetype/animations/loaders/small/small_dark.png +0 -0
  167. data/templates/project/vendor/archetype/animations/loaders/small/small_dark_static.png +0 -0
  168. data/templates/project/vendor/archetype/animations/loaders/small/small_static.png +0 -0
  169. data/templates/project/vendor/archetype/fontawesome-webfont.eot +0 -0
  170. data/templates/project/vendor/archetype/fontawesome-webfont.svg +0 -255
  171. data/templates/project/vendor/archetype/fontawesome-webfont.ttf +0 -0
  172. data/templates/project/vendor/archetype/fontawesome-webfont.woff +0 -0
  173. data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.eot +0 -0
  174. data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.svg +0 -255
  175. data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.ttf +0 -0
  176. data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.woff +0 -0
  177. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders-s7889ccc8c1.png +0 -0
  178. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large.png +0 -0
  179. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large_dark.png +0 -0
  180. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large_dark_static.png +0 -0
  181. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large_static.png +0 -0
  182. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium.png +0 -0
  183. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium_dark.png +0 -0
  184. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium_dark_static.png +0 -0
  185. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium_static.png +0 -0
  186. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small.png +0 -0
  187. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small_dark.png +0 -0
  188. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small_dark_static.png +0 -0
  189. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small_static.png +0 -0
  190. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/sprites/hovercard_tip.png +0 -0
  191. data/test/fixtures/stylesheets/archetype/config.rb +0 -21
  192. data/test/fixtures/stylesheets/archetype/source/b.scss +0 -9
  193. data/test/fixtures/stylesheets/archetype/source/base.scss +0 -3
  194. data/test/fixtures/stylesheets/archetype/source/hacks/ie_pseudo.scss +0 -13
  195. data/test/fixtures/stylesheets/archetype/source/hacks/transparent_focusable.scss +0 -5
  196. data/test/fixtures/stylesheets/archetype/source/locale.scss +0 -43
  197. data/test/fixtures/stylesheets/archetype/source/styleguide/alerts.scss +0 -21
  198. data/test/fixtures/stylesheets/archetype/source/styleguide/buttons.scss +0 -18
  199. data/test/fixtures/stylesheets/archetype/source/styleguide/drop.scss +0 -101
  200. data/test/fixtures/stylesheets/archetype/source/styleguide/extend.scss +0 -24
  201. data/test/fixtures/stylesheets/archetype/source/styleguide/fallback_styles.scss +0 -23
  202. data/test/fixtures/stylesheets/archetype/source/styleguide/invalid_structures.scss +0 -85
  203. data/test/fixtures/stylesheets/archetype/source/styleguide/multi_value.scss +0 -18
  204. data/test/fixtures/stylesheets/archetype/source/styleguide/nested_styleguides.scss +0 -40
  205. data/test/fixtures/stylesheets/archetype/source/styleguide/selective_state.scss +0 -22
  206. data/test/fixtures/stylesheets/archetype/source/ui/glyph_icon.scss +0 -35
  207. data/test/fixtures/stylesheets/archetype/source/ui/hide_element.scss +0 -5
  208. data/test/fixtures/stylesheets/archetype/source/ui/stroke.scss +0 -13
  209. data/test/fixtures/stylesheets/archetype/source/ui/triangle.scss +0 -13
  210. data/test/fixtures/stylesheets/archetype/source/utilities/associative.scss +0 -24
  211. data/test/fixtures/stylesheets/archetype/source/utilities/custom_output_styler.scss +0 -22
  212. data/test/fixtures/stylesheets/archetype/source/utilities/if-set.scss +0 -16
  213. data/test/fixtures/stylesheets/archetype/source/utilities/spacing/horizontal-spacing.scss +0 -27
  214. data/test/fixtures/stylesheets/archetype/source/utilities/spacing/vertical-spacing.scss +0 -27
  215. data/test/fixtures/stylesheets/archetype/source/utilities/styles/filter.scss +0 -9
  216. data/test/fixtures/stylesheets/archetype/source/utilities/styles/font-family.scss +0 -9
  217. data/test/fixtures/stylesheets/archetype/source/utilities/styles/z-index.scss +0 -18
  218. data/test/fixtures/stylesheets/archetype/source/utilities/targeting/target-browser.scss +0 -77
  219. data/test/fixtures/stylesheets/archetype/source/utilities/targeting/target-os.scss +0 -42
  220. data/test/fixtures/stylesheets/archetype/tmp/b.css +0 -14
  221. data/test/fixtures/stylesheets/archetype/tmp/base.css +0 -349
  222. data/test/fixtures/stylesheets/archetype/tmp/hacks/ie_pseudo.css +0 -11
  223. data/test/fixtures/stylesheets/archetype/tmp/hacks/transparent_focusable.css +0 -4
  224. data/test/fixtures/stylesheets/archetype/tmp/locale.css +0 -23
  225. data/test/fixtures/stylesheets/archetype/tmp/styleguide/alerts.css +0 -711
  226. data/test/fixtures/stylesheets/archetype/tmp/styleguide/buttons.css +0 -2119
  227. data/test/fixtures/stylesheets/archetype/tmp/styleguide/drop.css +0 -63
  228. data/test/fixtures/stylesheets/archetype/tmp/styleguide/extend.css +0 -11
  229. data/test/fixtures/stylesheets/archetype/tmp/styleguide/fallback_styles.css +0 -10
  230. data/test/fixtures/stylesheets/archetype/tmp/styleguide/invalid_structures.css +0 -21
  231. data/test/fixtures/stylesheets/archetype/tmp/styleguide/multi_value.css +0 -13
  232. data/test/fixtures/stylesheets/archetype/tmp/styleguide/nested_styleguides.css +0 -28
  233. data/test/fixtures/stylesheets/archetype/tmp/styleguide/selective_state.css +0 -177
  234. data/test/fixtures/stylesheets/archetype/tmp/ui/glyph_icon.css +0 -127
  235. data/test/fixtures/stylesheets/archetype/tmp/ui/hide_element.css +0 -8
  236. data/test/fixtures/stylesheets/archetype/tmp/ui/stroke.css +0 -17
  237. data/test/fixtures/stylesheets/archetype/tmp/ui/triangle.css +0 -35
  238. data/test/fixtures/stylesheets/archetype/tmp/utilities/associative.css +0 -9
  239. data/test/fixtures/stylesheets/archetype/tmp/utilities/custom_output_styler.css +0 -8
  240. data/test/fixtures/stylesheets/archetype/tmp/utilities/if-set.css +0 -9
  241. data/test/fixtures/stylesheets/archetype/tmp/utilities/spacing/horizontal-spacing.css +0 -29
  242. data/test/fixtures/stylesheets/archetype/tmp/utilities/spacing/vertical-spacing.css +0 -29
  243. data/test/fixtures/stylesheets/archetype/tmp/utilities/styles/filter.css +0 -11
  244. data/test/fixtures/stylesheets/archetype/tmp/utilities/styles/font-family.css +0 -16
  245. data/test/fixtures/stylesheets/archetype/tmp/utilities/styles/z-index.css +0 -15
  246. data/test/fixtures/stylesheets/archetype/tmp/utilities/targeting/target-browser.css +0 -105
  247. data/test/fixtures/stylesheets/archetype/tmp/utilities/targeting/target-os.css +0 -55
  248. data/test/helpers/diff.rb +0 -49
  249. data/test/helpers/io.rb +0 -36
  250. data/test/helpers/test_case.rb +0 -62
  251. data/test/integrations/archetype_test.rb +0 -126
  252. data/test/test_helper.rb +0 -26
  253. data/test/units/sass_extensions_test.rb +0 -200
@@ -0,0 +1,2 @@
1
+ // units
2
+ $CONFIG_UNIT_FORCE_INT: true !default; // force units to be whole integers. if set to strict, $abuse flags won't work [false|true|strict]
@@ -0,0 +1,10 @@
1
+ $archetype-glyph-selector: null !default;
2
+ $archetype-pseudo-selector: null !default;
3
+ $archetype-placeholder-registry: () !default;
4
+
5
+ // TODO - not sure if these should be defaulted or not, who knows?
6
+ $archetype-current-value: null !global;
7
+ $archetype-origin-function: null !global;
8
+
9
+ $CORE_GLYPH_SELECTOR_VAR: '$archetype-glyph-selector';
10
+ $CORE_GLYPH_SELECTOR_VAR: '$archetype-pseudo-selector';
@@ -0,0 +1,4 @@
1
+ // register module
2
+ $a-blackhole: register-archetype-module(archetype/hacks);
3
+
4
+ @import "hacks";
@@ -0,0 +1,160 @@
1
+ // @category hacks
2
+
3
+ $a-blackhole: require-archetype-modules(archetype/config);
4
+
5
+ // hack to support negative margins in legacy IE
6
+ // @mixin hack-negative-margin
7
+ @mixin hack-negative-margin() {
8
+ @if(support-legacy-browser('ie', '7', $threshold: $critical-usage-threshold)) {
9
+ @include has-layout();
10
+ position: relative;
11
+ }
12
+ }
13
+
14
+ // max-height hack
15
+ // @mixin max-height
16
+ // @param $value {String} the height
17
+ @mixin max-height($value) {
18
+ @include hacked-maximum(height, $value);
19
+ }
20
+
21
+ // max-width hack
22
+ // @mixin max-width
23
+ // @param $value {String} the width
24
+ @mixin max-width($value) {
25
+ @include hacked-maximum(width, $value);
26
+ }
27
+
28
+ // generic max-* hack wrapper
29
+ // @mixin hacked-maximum
30
+ // @param $property {String} property [height|width]
31
+ // @param $value {String} the value
32
+ @mixin hacked-maximum($property, $value) {
33
+ max-#{$property}: $value;
34
+ @include underscore-hack($property, auto, $value);
35
+ }
36
+
37
+ // helper to create a :before pseudo element
38
+ // @mixin before
39
+ // @param $content {String} the content to set on the element
40
+ // @content
41
+ @mixin before($content: false) {
42
+ @include -archetype-pseudo($placement: before, $content: $content) {
43
+ @content;
44
+ };
45
+ }
46
+
47
+ // helper to create a :after pseudo element
48
+ // @mixin after
49
+ // @param $content {String} the content to set on the element
50
+ // @content
51
+ @mixin after($content: false) {
52
+ @include -archetype-pseudo($placement: after, $content: $content) {
53
+ @content;
54
+ };
55
+ }
56
+
57
+ // creates a cross-browser pseudo before/after element
58
+ // @mixin after
59
+ // @param $content {String} the content to set on the element
60
+ // @content
61
+ @mixin -archetype-pseudo($placement: before, $content: false) {
62
+ $selector: '&:#{$placement}';
63
+ @include ie-pseudo($placement: $placement, $content: $content);
64
+ $archetype-pseudo-selector: if($archetype-pseudo-selector, '#{$selector}, #{$archetype-pseudo-selector}', $selector) !global;
65
+ #{$archetype-pseudo-selector} {
66
+ @if $content {
67
+ content: $content;
68
+ }
69
+ @content;
70
+ }
71
+ }
72
+
73
+ // proxy for ie-pseudo
74
+ // @mixin ie-pseudo-before
75
+ // @param $styles {String} the styles to apply to the pseudo-element
76
+ // @param $content {String} the content to insert into the element (similar to css `content` attribute)
77
+ // @param $name {String} the name of the element
78
+ // @content
79
+ @mixin ie-pseudo-before($styles: false, $content: false, $name: '') {
80
+ @include ie-pseudo($styles, $content, before, $name) {
81
+ @content;
82
+ }
83
+ }
84
+
85
+ // proxy for ie-pseudo
86
+ // @mixin ie-pseudo-after
87
+ // @param $styles {String} the styles to apply to the pseudo-element
88
+ // @param $content {String} the content to insert into the element (similar to css `content` attribute)
89
+ // @param $name {String} the name of the element
90
+ // @content
91
+ @mixin ie-pseudo-after($styles: false, $content: false, $name: '') {
92
+ @include ie-pseudo($styles, $content, after, $name) {
93
+ @content;
94
+ }
95
+ }
96
+
97
+ // this creates a one-time executing expression that inserts an element relative to `this` element.
98
+ // this allows some level of support for :before/:after in IE6/7
99
+ // inspired by http://nicolasgallagher.com/better-float-containment-in-ie/
100
+ // @mixin ie-pseudo
101
+ // @param $styles {String} the styles to apply to the pseudo-element
102
+ // @param $content {String} the content to insert into the element (similar to css `content` attribute)
103
+ // @param $placement {String} [before|after] simulate :before or :after behavior
104
+ // @param $name {String} the name of the element
105
+ // @param $uid {String} a custom, unique identifier for the generate element
106
+ // @content
107
+ @mixin ie-pseudo($styles: false, $content: false, $placement: before, $name: '', $uid: false) {
108
+ $archetype-pseudo-selector: null !global;
109
+ @if(support-legacy-browser('ie', '7', $threshold: $critical-usage-threshold)) {
110
+ $uid: if($uid, $uid, unique('ie-pseudo-'));
111
+ $archetype-pseudo-selector: '& ##{$uid}' !global;
112
+ $this: 't';
113
+ $method: if($placement == before, insertBefore, appendChild);
114
+ @if $CONFIG_GENERATED_TAG_CSS {
115
+ $styles: if($styles and not is_null($styles), #{$CONFIG_GENERATED_TAG_CSS}#{$styles}, $CONFIG_GENERATED_TAG_CSS);
116
+ }
117
+ $cmd: (unquote('#{$this}.el=document.createElement("#{prefixed-tag($name)}"),#{$this}.el.id="#{$uid}"'));
118
+ $method: if($placement == before, insertBefore, appendChild);
119
+ @if $content and not is_null($content) {
120
+ $cmd: append($cmd, unquote('#{$this}.el.innerHTML="#{-ie-pseudo-content($content)}"'));
121
+ }
122
+ @if $styles and not is_null($styles) and $styles != '' and $CONFIG_GENERATED_TAG_INLINE {
123
+ // sets the icon styles on the node if we're using inline styles...
124
+ $cmd: append($cmd, unquote('#{$this}.el.style.cssText="#{$styles}"'));
125
+ }
126
+ // if we're using the insertBefore method, we need to specify the node reference to the first childNode
127
+ $reference-node: if($placement == before, ',#{$this}.childNodes[0]||null', '');
128
+ $cmd: append($cmd, unquote('#{$this}.#{$method}(#{$this}.el#{$reference-node})'));
129
+ $runOnce: unquote('this.runtimeStyle.zoom="1"'); // this ensures the expression is only invoked once
130
+
131
+ // delim with a single comma, no spaces
132
+ $cmd: list-join($cmd, ',');
133
+
134
+ // we execute in a setTimeout to decouple from the current UI thread
135
+ // this prevents an edge case in IE crashing with an `Operation Aborted` if the node hasn't finished rendering yet
136
+ // http://www.nczonline.net/blog/2008/03/17/the-dreaded-operation-aborted-error/
137
+ *zoom: expression(#{$runOnce},(function(#{$this}){setTimeout(function(){#{$cmd}})}(this)));
138
+
139
+ // if we're NOT using inline styles...
140
+ @if not $CONFIG_GENERATED_TAG_INLINE and $styles and not is_null($styles) {
141
+ // output it on the generated selector
142
+ #{$archetype-pseudo-selector} {
143
+ @include to-styles(-style-string-to-map(unquote($styles)));
144
+ @content;
145
+ }
146
+ }
147
+ }
148
+ }
149
+
150
+ // a hack that allows elements with transparent backgrounds to be focusable in IE
151
+ // @mixin transparent-focusable
152
+ // @param $url {String} an optional URL to point to an image (not required)
153
+ // @param $data {String} an optional data URI for a transparent image (not required)
154
+ @mixin transparent-focusable($url: url(https://), $data: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7') {
155
+ $bg: (transparent);
156
+ background: append($bg, $data);
157
+ @if $url {
158
+ @include target-browser(ie lte 7, background, append($bg, $url));
159
+ }
160
+ }
@@ -0,0 +1,2 @@
1
+ $a-blackhole: require-archetype-modules(archetype/hacks);
2
+
@@ -0,0 +1,4 @@
1
+ // register module
2
+ $a-blackhole: register-archetype-module(archetype/styleguide);
3
+
4
+ @import "styleguide";
@@ -0,0 +1 @@
1
+ $a-blackhole: require-archetype-modules(archetype/styleguide);
@@ -7,35 +7,58 @@
7
7
  // @param $exclude {List} a list of styles to exclude from output
8
8
  // @param $state {String} a specific state to output
9
9
  // @param $theme {String} the theme name
10
- @mixin styleguide($is: (), $is-2: false, $is-3: false, $is-4: false, $is-5: false, $is-6: false, $is-7: false, $is-8: false, $is-9: false, $is-10: false, $exclude: (), $state: false, $theme: $CONFIG_THEME) {
10
+ // @param $here {Boolean} if true, will force the content to be output in the current context, and not extended
11
+ // @content
12
+ @mixin styleguide($is: (), $is-2: false, $is-3: false, $is-4: false, $is-5: false, $is-6: false, $is-7: false, $is-8: false, $is-9: false, $is-10: false, $exclude: (), $state: null, $theme: $CONFIG_THEME, $here: null) {
11
13
  $definition: compact($is, $is-2, $is-3, $is-4, $is-5, $is-6, $is-7, $is-8, $is-9, $is-10);
12
14
  @if length($definition) > 0 {
13
- $styles: styleguide($definition, $state, $theme);
14
- // output a debug message
15
- @include debug-message("[archetype:styleguide:begin] --- #{$definition} ---");
16
- // generate actual styles
17
- @include to-styles($styles, $exclude: $exclude);
18
- // more debugging
19
- @include debug-message("[archetype:styleguide:end] --- #{$definition} ---");
15
+ $styles: _styleguide($definition, $state, $theme);
16
+ // output the styles
17
+ $archetype-origin-function: styleguide !global;
18
+ @include to-styles($styles, $exclude: $exclude, $here: $here) {
19
+ @content;
20
+ };
21
+ $archetype-origin-function: null !global;
20
22
  }
21
23
  }
22
24
 
25
+ // returns the styleguide object
26
+ // @function styleguide
27
+ // @param $is ... $is-10 {List} a descriptive definition of the element, must contain an ID and optionally any modifiers e.g. `large primary button`
28
+ // @param $exclude {List} a list of styles to exclude from output
29
+ // @param $state {String} a specific state to output
30
+ // @param $theme {String} the theme name
31
+ @function styleguide($is: (), $is-2: false, $is-3: false, $is-4: false, $is-5: false, $is-6: false, $is-7: false, $is-8: false, $is-9: false, $is-10: false, $exclude: (), $state: null, $theme: $CONFIG_THEME) {
32
+ $definition: compact($is, $is-2, $is-3, $is-4, $is-5, $is-6, $is-7, $is-8, $is-9, $is-10);
33
+ @return _styleguide($definition, $state, $theme);
34
+ }
35
+
23
36
  // output the difference between two styelguide invocations
24
37
  // @mixin styleguide-diff
25
38
  // @param $original {List} the original styleguide reference to compare to
26
39
  // @param $other {List} the other styleguide reference
27
40
  // @param $exclude {List} a list of styles to exclude from output
28
41
  // @param $theme {String} the theme name
29
- @mixin styleguide-diff($original, $other, $exclude: (), $theme: $CONFIG_THEME) {
30
- $original: compact($original, nil);
31
- $other: compact($other, nil);
32
- $diff: styleguide-diff($original, $other, $theme);
42
+ // @content
43
+ @mixin styleguide-diff($original, $other, $exclude: ()) {
44
+ $diff: styleguide-diff($original, $other);
33
45
  @if length($diff) > 0 {
34
- // output a debug message
35
- @include debug-message("[archetype:styleguide:diff:begin] --- `#{$original}` vs `#{$other}` ---");
36
- // generate actual styles
37
- @include to-styles($diff, $exclude: $exclude);
38
- // more debugging
39
- @include debug-message("[archetype:styleguide:diff:end] --- `#{$original}` vs `#{$other}` ---");
46
+ // output the styles
47
+ $archetype-origin-function: styleguide-diff !global;
48
+ @include to-styles($diff, $exclude: $exclude, $meta: (origin: styleguide-diff)) {
49
+ @content;
50
+ };
51
+ $archetype-origin-function: null !global;
40
52
  }
41
53
  }
54
+
55
+ // checks to see whether or not a component should be registered
56
+ // @function should-register-component
57
+ // @param $component-id {String} the component identifier
58
+ // @param $extension-id {String} the extension identifier
59
+ // @return {Boolean} whether or not the component should be registered
60
+ @function should-register-component($component-id, $extension-id: null) {
61
+ $component-exists: if($extension-id, styleguide-component-exists($component-id, $CONFIG_THEME), styleguide-component-exists($component-id, $CONFIG_THEME, $extension-id));
62
+ $component-excluded: index($CONFIG_THEME_EXCLUDE, $component-id);
63
+ @return not ($component-exists or $component-excluded);
64
+ }
@@ -0,0 +1,41 @@
1
+ // @category ui/accessibility
2
+
3
+ // throw an error if archetype/ui has not been registered
4
+ $a-blackhole: require-archetype-modules(archetype/ui);
5
+
6
+ // hide element visibly but preserve screen-reader support
7
+ // @mixin hide-element
8
+ // @credit Jonathan Snook
9
+ // @link http://snook.ca/archives/html_and_css/hiding-content-for-accessibility
10
+ @mixin hide-element() {
11
+ position: absolute !important;
12
+ height: 1px;
13
+ width: 1px;
14
+ overflow: hidden;
15
+ @include target-browser(ie lte 7, clip, rect(1px 1px 1px 1px));
16
+ clip: rect(1px, 1px, 1px, 1px);
17
+ }
18
+
19
+ // reverse hide-element and make the element visible again
20
+ // @mixin unhide-element
21
+ // @see hide-element
22
+ // @param $position {String} value for the position property
23
+ // @param $height {String} value for the height property
24
+ // @param $width {String} value for the width property
25
+ // @param $overflow {String} value for the overflow property
26
+ @mixin unhide-element($position: static, $height: auto, $width: auto, $overflow: visible) {
27
+ position: $position !important;
28
+ height: $height;
29
+ width: $width;
30
+ overflow: $overflow;
31
+ clip: auto;
32
+ }
33
+
34
+ // a method for removing default styling from a button
35
+ // @mixin unstyled-button
36
+ @mixin unstyled-button() {
37
+ background: none;
38
+ border: none;
39
+ padding: 0;
40
+ @include appearance(none);
41
+ }
@@ -0,0 +1,19 @@
1
+ // @category ui/breakpoints
2
+
3
+ // wraps the content block in a breakpoint media query
4
+ // @mixin breakpoint
5
+ // @param $key {String} the breakpoint to use
6
+ // @content
7
+ @mixin breakpoint($key) {
8
+ $breakpoint: get-breakpoint($key);
9
+ @if $breakpoint {
10
+ @media #{$breakpoint} {
11
+ /* [archetype:breakpoint:begin] --- #{$key} --- */
12
+ @content;
13
+ /* [archetype:breakpoint:end] --- #{$key} --- */
14
+ }
15
+ }
16
+ @else {
17
+ @warn "[archetype:breakpoint] could not find a breakpoint for `#{$key}`";
18
+ }
19
+ }
@@ -0,0 +1,10 @@
1
+ // register module
2
+ $a-blackhole: register-archetype-module(archetype/ui);
3
+
4
+ @import "accessibility";
5
+ @import "breakpoints";
6
+ @import "elements";
7
+ @import "glyphs";
8
+ @import "layout";
9
+ @import "locale";
10
+ @import "scopes";
@@ -0,0 +1,98 @@
1
+ // @category ui/elements
2
+
3
+ // throw an error if archetype/ui has not been registered
4
+ $a-blackhole: require-archetype-modules(archetype/ui);
5
+
6
+ // computes the border position to use
7
+ // @function _getTriangleBorderDirection
8
+ // @private
9
+ // @param $direction {String} the direction the arrow is pointing (top, left, top left, etc)
10
+ // @return {List} the computed border position (e.g. top, left, bottom)
11
+ @function _getTriangleBorderDirection($direction) {
12
+ @if(length($direction) == 1) {
13
+ @return opposite-position($direction);
14
+ }
15
+ @return if(index($direction, top), bottom, top);
16
+ }
17
+
18
+ // computes the border width for the triangle
19
+ // @function _getTriangleBorderWidth
20
+ // @private
21
+ // @param $width {Number} the width of the arrow
22
+ // @param $height {Number} the height of the arrow
23
+ // @param $direction {String} the direction the arrow is pointing (top, left, top left, etc)
24
+ // @return {List} the computed border widths
25
+ @function _getTriangleBorderWidth($width, $height, $direction) {
26
+ @if(length($direction) == 1) {
27
+ // TOP
28
+ @if($direction == top) {
29
+ @return 0 ($width/2) $height;
30
+ }
31
+ // BOTTOM
32
+ @else if($direction == bottom) {
33
+ @return $height ($width/2) 0;
34
+ }
35
+ // LEFT
36
+ @else if($direction == left) {
37
+ @return ($height/2) $width ($height/2) 0;
38
+ }
39
+ // RIGHT
40
+ @else if($direction == right) {
41
+ @return ($height/2) 0 ($height/2) $width;
42
+ }
43
+ }
44
+ @else if(index($direction, top)) {
45
+ // TOP LEFT
46
+ @if(index($direction, left)) {
47
+ @return 0 $width $height 0;
48
+ }
49
+ // TOP RIGHT
50
+ @else {
51
+ @return 0 0 $height $width;
52
+ }
53
+ }
54
+ @else if(index($direction, bottom)) {
55
+ // BOTTOM LEFT
56
+ @if(index($direction, left)) {
57
+ @return $height $width 0 0;
58
+ }
59
+ // BOTTOM RIGHT
60
+ @else {
61
+ @return $height 0 0 $width;
62
+ }
63
+ }
64
+ @return 0;
65
+ }
66
+
67
+ // generates a cross-browser triangle using borders
68
+ // @mixin triangle
69
+ // @param $direction {String} the direction the arrow is pointing (top, left, top left, etc)
70
+ // @param $width {Number} the width of the arrow
71
+ // @param $height {Number} the height of the arrow
72
+ // @param $color {Color} the color of the arrow
73
+ @mixin triangle($direction: bottom, $width: 1em, $height: false, $color: #aaa) {
74
+ // if no height was specified, assume it's identical to width
75
+ @if(not $height) {
76
+ $height: $width;
77
+ }
78
+ // zero out it's content
79
+ height: 0;
80
+ width : 0;
81
+ // IE6 needs some extra love
82
+ @include target-browser(ie 6, font-size, 0);
83
+ @include target-browser(ie 6, line-height, 0);
84
+ border: {
85
+ // for IE6, transparent borders are simulated using `dashed` styles instead of a chroma filter
86
+ // IE won't render a `dashed` border-style unless (width * 5) >= border-width
87
+ // since width is always 0, dashed borders aren't rendered
88
+ // @link http://hedgerwow.appspot.com/demo/arrows
89
+ style: dashed;
90
+ // transparent for all other browsers
91
+ color: transparent;
92
+ width: _getTriangleBorderWidth($width, $height, $direction);
93
+ #{_getTriangleBorderDirection($direction)}: {
94
+ color: $color;
95
+ style: solid;
96
+ }
97
+ }
98
+ }
@@ -0,0 +1,244 @@
1
+ // @category ui/glyphs
2
+
3
+ // throw an error if archetype/ui has not been registered
4
+ $a-blackhole: require-archetype-modules(archetype/ui);
5
+
6
+ // create a stroke line around text (or font icon)
7
+ // @mixin stroke
8
+ // @param $width {Number} the width of the stroke
9
+ // @param $color {Color} the color of the stroke
10
+ // @param $shadow {List} an additional drop shadow to attach
11
+ @mixin glyph-stroke($width: 1px, $color: black, $shadow: false) {
12
+ @include box-shadow(compact(0 $width 0 $color, 0 -1*$width 0 $color, $width 0 0 $color, -1*$width 0 0 $color, $shadow));
13
+ }
14
+
15
+ // computes the glyph icon info
16
+ // @function glyph-icon
17
+ // @param $icon {String} the icon name
18
+ // @param $size {Number} the size of the icon
19
+ // @param $color {Color} the color of the font
20
+ // @param $library {String} the glyph library to use
21
+ // @param $grid {Number|String} the grid to use (defaults to a smart selection, use `preferred` to always use the first (preferred) grid option)
22
+ @function glyph-icon($icon, $size: default, $color: inherit, $library: default, $grid: null) {
23
+ $char-mapping: null;
24
+ $char-code: null;
25
+ // check that the library is valid, if not, throw a warning and use the default
26
+ $library: get-glyph-library($library);
27
+ // if we have an icon...
28
+ @if $icon {
29
+ // if it looks like it's a character code...
30
+ @if looks-like-character-code($icon) {
31
+ // just use it
32
+ $char-code: $icon;
33
+ }
34
+ // otherwise, we'll look up the character code from the library mapping
35
+ @else {
36
+ $char-mapping: map-get(map-get($library, mappings), $icon);
37
+ @if $char-mapping {
38
+ @if type-of($char-mapping) == map {
39
+ $char-code: map-get($char-mapping, char) or $char-mapping;
40
+ $char-code: get-runtime-locale-value($char-code);
41
+ }
42
+ @else {
43
+ $char-code: $char-mapping;
44
+ }
45
+ }
46
+ }
47
+ }
48
+ // if we couldn't find a valid character code (and we were asked to output an icon)...
49
+ @if $char-code == null and $icon != false {
50
+ // throw a warning and be done with it
51
+ @warn "[archetype:glyph] could not find character mapping for `#{icon}`";
52
+ }
53
+ // otherwise continue on
54
+ @if $size == default {
55
+ $default-size: null;
56
+ @if $icon and type-of($char-mapping) == map {
57
+ $default-size: map-get($char-mapping, size);
58
+ }
59
+ $size: $default-size or 100%;
60
+ }
61
+
62
+ // choose which grid size to use
63
+ $grids: map-get($library, grids);
64
+ @if $grid == preferred {
65
+ $grid: nth(-archetype-list($grids), 1);
66
+ }
67
+ @else if not ($grid and index(-archetype-list($grids), $grid)) {
68
+ $grid: choose-best-glyph-grid($grids, $size);
69
+ }
70
+
71
+ $version: map-get($library, version);
72
+
73
+ $name: archetype-namespace(map-get($library, name));
74
+ @if $grid {
75
+ $name: "#{$name}_#{$grid}";
76
+ }
77
+
78
+ $font-family: unquote(if($version, "'#{$name}-#{$version}', ", "") + "'#{$name}'");
79
+ $font-weight: map-get($library, weight) or $CONFIG_GLYPHS_WEIGHT;
80
+ $font-style: map-get($library, style) or $CONFIG_GLYPHS_STYLE;
81
+
82
+ @return (
83
+ char-code: $char-code,
84
+ font-family: $font-family,
85
+ font-weight: $font-weight,
86
+ font-style: $font-style,
87
+ font-size: $size,
88
+ color: $color
89
+ );
90
+ }
91
+
92
+ // create a glyph icon
93
+ // @mixin glyph-icon
94
+ // @param $icon {String} the icon name
95
+ // @param $size {Number} the size of the icon
96
+ // @param $color {Color} the color of the font
97
+ // @param $placement {String} where to place the icon [before|after|inline]
98
+ // @param $ie-styles {String} styles to apply to IE6/7
99
+ // @param $ie-uid {String} a custom, unique identifier for the generate IE6/7 element
100
+ // @param $library {String} the glyph library to use
101
+ // @param $grid {Number|String} the grid to use (defaults to a smart selection, use `preferred` to always use the first (preferred) grid option)
102
+ // @content
103
+ @mixin glyph-icon($icon, $size: default, $color: inherit, $placement: before, $ie-styles: false, $ie-uid: false, $library: default, $grid: null, $smoothing: $CONFIG_GLYPHS_SMOOTHING) {
104
+ $icons: -archetype-list($icon);
105
+ // compute the glyph info
106
+ $glyph-info: null;
107
+ $char-codes: ();
108
+ // allow multiple glyph character codes, but we can only use the styles for the first (primary) glyph
109
+ // for each icon...
110
+ @each $icon in $icons {
111
+ // compute it's info
112
+ $info: glyph-icon($icon: $icon, $size: $size, $color: $color, $library: $library, $grid: $grid);
113
+ // if the info is good...
114
+ @if $info {
115
+ $char-codes: append($char-codes, unquote(map-get($info, char-code)), space);
116
+ @if not $glyph-info {
117
+ $glyph-info: $info;
118
+ }
119
+ }
120
+ }
121
+
122
+ $archetype-glyph-selector: null !global;
123
+
124
+ @if $glyph-info and (length($char-codes) > 0) {
125
+ $char-codes: "#{$char-codes}";
126
+ $selector: if(index(before after, $placement), '&:#{$placement}', '&');
127
+ $archetype-glyph-selector: $selector !global;
128
+
129
+ @if $selector != '&' {
130
+ #{$selector} {
131
+ content: $char-codes;
132
+ }
133
+ @include ie-pseudo($styles: $ie-styles, $content: $char-codes, $placement: $placement, $name: glyph, $uid: $ie-uid);
134
+ @if $archetype-pseudo-selector {
135
+ $archetype-glyph-selector: '#{$selector}, #{$archetype-pseudo-selector}' !global;
136
+ }
137
+ }
138
+
139
+ // apply it to all selector contexts
140
+ #{$archetype-glyph-selector} {
141
+ // things that are likely not to change...
142
+ @include to-styles((
143
+ font-family: map-get($glyph-info, font-family),
144
+ font-weight: map-get($glyph-info, font-weight),
145
+ font-style: map-get($glyph-info, font-style),
146
+ text-decoration: none, // prevents a double underline in firefox
147
+ display: inline-block, // prevents the icon from being underlined in most browsers
148
+ speak: none,
149
+ -moz-osx-font-smoothing: if($smoothing, grayscale, null),
150
+ -webkit-font-smoothing: if($smoothing, antialiased, null)
151
+ ));
152
+
153
+ // things that are likely to change more often...
154
+ @include to-styles((
155
+ font-size: map-get($glyph-info, font-size),
156
+ color: map-get($glyph-info, color)
157
+ )) {
158
+ // pass the block context here
159
+ @content;
160
+ };
161
+ }
162
+ }
163
+ }
164
+
165
+ // generates all `@font-face` definitions for all the potential glyph libraries
166
+ // @mixin glyph-libraries
167
+ // @param $only {List} if set, only use the libraries defined in this list
168
+ @mixin glyph-libraries($only: null) {
169
+ $only: if($only == null, $only, -archetype-list($only));
170
+ // the font-face mixin will likely change in a future version, keep an eye on this
171
+ // https://github.com/chriseppstein/compass/issues/867
172
+
173
+ @each $key, $library in get-all-glyph-libraries() {
174
+ @if not $only or list($only, $key) {
175
+ $library: get-glyph-library($key);
176
+ $name_raw: archetype-namespace(map-get($library, name));
177
+ $files: map-get($library, files);
178
+ $weight: map-get($library, weight) or $CONFIG_GLYPHS_WEIGHT;
179
+ $style: map-get($library, style) or $CONFIG_GLYPHS_STYLE;
180
+ $version: map-get($library, version);
181
+ $path: map-get($library, path);
182
+ $svg-id: map-get($library, svg-id) or $name_raw;
183
+ $grids: -archetype-list(map-get($library, grids));
184
+
185
+ $inlined: map-get($files, inline);
186
+ @if $inlined == null {
187
+ $inlined: $CONFIG_GLYPHS_INLINE_FONTS;
188
+ }
189
+
190
+ $output-fallback: $CONFIG_GLYPHS_OUTPUT_FALLBACK;
191
+
192
+ $subs: map-merge($library, (
193
+ path: str-substitute($path, (version: $version)),
194
+ svg-id: $svg-id
195
+ ));
196
+
197
+ // files
198
+ $files_eot_raw: str-substitute(map-get($files, eot), $library);
199
+ $files_std_raw: map-get($files, std);
200
+
201
+ @each $grid in $grids {
202
+ $name: $name_raw;
203
+ $subs: map-merge($subs, (grid: $grid));
204
+
205
+ $files_eot: if($files_eot_raw and $files_eot_raw != '', quote(str-substitute($files_eot_raw, $subs)), false);
206
+ $files_std: ();
207
+ $files: ();
208
+ @each $file in $files_std_raw {
209
+ $file: quote(str-substitute($file, $subs));
210
+ $files_std: append($files_std, $file);
211
+ // keep track of the file for later...
212
+ $files: append($files, $file);
213
+ }
214
+
215
+ // decide if we're using inline (data URI) files
216
+ $files_std: if($inlined, inline-font-files($files_std...), font-files($files_std...));
217
+
218
+ @if $grid {
219
+ $name: "#{$name}_#{$grid}";
220
+ // output the fallback @font-face
221
+ @if $output-fallback {
222
+ @include font-face($name_raw, $files_std, $files_eot, $weight, $style);
223
+ @include font-face('#{$name_raw}-#{$version}', $files_std, $files_eot, $weight, $style);
224
+ }
225
+ }
226
+ @if $output-fallback or not $version {
227
+ @include font-face($name, $files_std, $files_eot, $weight, $style);
228
+ }
229
+ @if $version {
230
+ // output the @font-face set with a versioned family name
231
+ // this will help avoid collisions when multi-app CSS is loaded on a single page
232
+ @include font-face('#{$name}-#{$version}', $files_std, $files_eot, $weight, $style);
233
+ }
234
+ $output-fallback: false;
235
+ }
236
+ }
237
+ }
238
+ }
239
+
240
+ // here for back-compat only
241
+ @mixin base-glyph {
242
+ @warn "the `base-glyph` mixin will be deprecated soon. instead use the `glyph-libraries` mixin";
243
+ @include glyph-libraries;
244
+ }