@tacc/core-styles 0.11.0 → 1.0.0

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 (260) hide show
  1. package/README.md +107 -85
  2. package/dist/branding_logos.css +1 -1
  3. package/dist/components/README.css +1 -1
  4. package/dist/components/bootstrap/bootstrap--form.demo.css +1 -0
  5. package/dist/components/bootstrap/bootstrap--modal.demo.css +1 -0
  6. package/dist/components/bootstrap/demo.css +1 -0
  7. package/dist/components/bootstrap.container.css +1 -1
  8. package/dist/components/bootstrap.css +1 -1
  9. package/dist/components/bootstrap.figure.css +1 -1
  10. package/dist/components/bootstrap.form.css +1 -1
  11. package/dist/components/bootstrap.modal.css +1 -1
  12. package/dist/components/bootstrap.pagination.css +1 -1
  13. package/dist/components/c-button/demo.css +1 -0
  14. package/dist/components/c-button.css +1 -1
  15. package/dist/components/c-callout.css +1 -1
  16. package/dist/components/c-card.css +1 -1
  17. package/dist/components/c-data-list.css +1 -1
  18. package/dist/components/c-footer.css +1 -1
  19. package/dist/components/c-form.css +1 -0
  20. package/dist/components/c-image-map.css +1 -1
  21. package/dist/components/c-image-map.skin.css +1 -1
  22. package/dist/components/c-image-map.structure.css +1 -1
  23. package/dist/components/c-message.css +1 -1
  24. package/dist/components/c-nav.css +1 -1
  25. package/dist/components/c-page.css +1 -1
  26. package/dist/components/c-recognition.css +1 -1
  27. package/dist/components/c-see-all-link.css +1 -1
  28. package/dist/components/c-show-more.css +1 -1
  29. package/dist/components/cortal.icon.css +1 -1
  30. package/dist/components/cortal.icon.font.css +1 -1
  31. package/dist/components/django-cms-forms.css +1 -0
  32. package/dist/components/django-cms-forms.hacks.css +1 -0
  33. package/dist/components/mui.tabs.css +1 -0
  34. package/dist/core-styles.base.css +4 -0
  35. package/dist/core-styles.cms.css +2 -0
  36. package/dist/core-styles.demo.css +2 -0
  37. package/dist/core-styles.header.css +2 -0
  38. package/dist/core-styles.portal.css +2 -0
  39. package/dist/core-styles.settings.css +3 -0
  40. package/dist/elements/README.css +1 -1
  41. package/dist/elements/bootstrap.css +1 -1
  42. package/dist/elements/demo.css +1 -0
  43. package/dist/elements/form.cms.css +1 -1
  44. package/dist/elements/html-elements.cms.css +1 -1
  45. package/dist/elements/html-elements.css +1 -0
  46. package/dist/elements/links/demo.css +1 -0
  47. package/dist/elements/links.css +1 -1
  48. package/dist/elements/table--basic.css +1 -1
  49. package/dist/elements/table--nested.css +1 -1
  50. package/dist/elements/table.css +1 -1
  51. package/dist/elements/tacc-search-bar.css +1 -1
  52. package/dist/fonts/BentonSans-Black.otf +0 -0
  53. package/dist/fonts/BentonSans-RegularItalic.otf +0 -0
  54. package/dist/fractal.server.refresh.css +1 -1
  55. package/dist/generics/README.css +1 -1
  56. package/dist/generics/fonts.css +1 -1
  57. package/dist/objects/README.css +1 -1
  58. package/dist/objects/o-fixed-header-table/demo.css +1 -0
  59. package/dist/objects/o-fixed-header-table.css +1 -1
  60. package/dist/objects/o-flex-item-table-wrap/demo.css +1 -0
  61. package/dist/objects/o-flex-item-table-wrap.css +1 -1
  62. package/dist/objects/o-float-content.css +1 -1
  63. package/dist/objects/o-grid.css +1 -1
  64. package/dist/objects/o-offset-content.css +1 -1
  65. package/dist/objects/o-section.css +1 -1
  66. package/dist/objects/o-site.css +1 -1
  67. package/dist/objects/o-table-wrap/demo.basic.css +1 -0
  68. package/dist/objects/o-table-wrap/demo.extra.css +1 -0
  69. package/dist/objects/o-table-wrap/extra.flexible-horz.css +1 -0
  70. package/dist/objects/o-table-wrap/extra.overflow-hidden.css +1 -0
  71. package/dist/objects/o-table-wrap/extra.overflow-scroll.css +1 -0
  72. package/dist/objects/o-table-wrap/o-table-wrap--flexible-horz.css +1 -0
  73. package/dist/objects/o-table-wrap/o-table-wrap--flexible-vert.css +1 -0
  74. package/dist/objects/o-table-wrap/o-table-wrap--overflow-hidden.css +1 -0
  75. package/dist/objects/o-table-wrap/o-table-wrap--overflow-scroll-extra.css +1 -0
  76. package/dist/objects/o-table-wrap/o-table-wrap--overflow-scroll.css +1 -0
  77. package/dist/objects/o-table-wrap.css +1 -0
  78. package/dist/settings/README.css +1 -1
  79. package/dist/settings/border.css +1 -1
  80. package/dist/settings/color.css +1 -1
  81. package/dist/settings/font.css +1 -1
  82. package/dist/settings/max-width.css +1 -1
  83. package/dist/settings/space.css +1 -1
  84. package/dist/tools/README.css +1 -1
  85. package/dist/tools/media-queries.css +1 -1
  86. package/dist/tools/x-article-link.css +1 -1
  87. package/dist/tools/x-center.css +1 -1
  88. package/dist/tools/x-fake-border.css +1 -1
  89. package/dist/tools/x-grid.css +1 -1
  90. package/dist/tools/x-layout.css +1 -1
  91. package/dist/tools/x-link/demo.css +1 -0
  92. package/dist/tools/x-link.css +1 -1
  93. package/dist/tools/x-mailto-text-replace.css +1 -1
  94. package/dist/tools/x-overlay.css +1 -1
  95. package/dist/tools/x-truncate.css +1 -1
  96. package/dist/trumps/README.css +1 -1
  97. package/dist/trumps/s-affixed-input-wrapper/demo.css +1 -0
  98. package/dist/trumps/s-affixed-input-wrapper.css +1 -1
  99. package/dist/trumps/s-article-list.css +1 -1
  100. package/dist/trumps/s-article-preview.css +1 -1
  101. package/dist/trumps/s-blockquote.css +1 -1
  102. package/dist/trumps/s-breadcrumbs.css +1 -1
  103. package/dist/trumps/s-cms-nav.css +1 -1
  104. package/dist/trumps/s-document.css +1 -1
  105. package/dist/trumps/s-footer.css +1 -1
  106. package/dist/trumps/s-guide-doc.css +1 -1
  107. package/dist/trumps/s-header.bootstrap.css +1 -0
  108. package/dist/trumps/s-header.css +1 -1
  109. package/dist/trumps/s-inline-dl.css +1 -1
  110. package/dist/trumps/s-irregular-links.css +1 -1
  111. package/dist/trumps/s-portal-nav.css +1 -1
  112. package/dist/trumps/s-style-guide.css +1 -1
  113. package/dist/trumps/s-system-specs.css +1 -1
  114. package/dist/trumps/tacc-search-bar.css +1 -1
  115. package/dist/trumps/u-empty.css +1 -1
  116. package/dist/trumps/u-hide.css +1 -1
  117. package/dist/trumps/u-mailto-text-replace.css +1 -1
  118. package/dist/trumps/u-nested-text-content.css +1 -1
  119. package/docs/index.md +10 -5
  120. package/docs/shortcuts/tables.md +7 -0
  121. package/fractal.config.js +32 -17
  122. package/package.json +11 -7
  123. package/src/.postcssrc.base.yml +11 -2
  124. package/src/bin/build.js +0 -1
  125. package/src/lib/_imports/_partials/text-of-one-sentence.hbs +1 -0
  126. package/src/lib/_imports/_preview.hbs +95 -42
  127. package/src/lib/_imports/branding_logos.css +0 -2
  128. package/src/lib/_imports/components/bootstrap/{bootstrap--form.docs.css → bootstrap--form.demo.css} +0 -0
  129. package/src/lib/_imports/components/bootstrap/{bootstrap--modal.docs.css → bootstrap--modal.demo.css} +0 -0
  130. package/src/lib/_imports/components/bootstrap/bootstrap--modal.readme.md +4 -0
  131. package/src/lib/_imports/components/bootstrap/config.yml +3 -7
  132. package/src/lib/_imports/components/bootstrap/{docs.css → demo.css} +2 -2
  133. package/src/lib/_imports/components/bootstrap.container.css +0 -1
  134. package/src/lib/_imports/components/bootstrap.form.css +0 -1
  135. package/src/lib/_imports/components/bootstrap.modal.css +3 -0
  136. package/src/lib/_imports/components/c-button/{docs.css → demo.css} +0 -5
  137. package/src/lib/_imports/components/c-button.css +3 -0
  138. package/src/lib/_imports/components/c-form/c-form.hbs +362 -0
  139. package/src/lib/_imports/components/c-form/config.yml +2 -0
  140. package/src/lib/_imports/components/c-form/readme.md +14 -0
  141. package/src/lib/_imports/components/c-form/toggle-field-errors.js +101 -0
  142. package/src/lib/_imports/components/c-form/toggle-required-fields.js +85 -0
  143. package/src/lib/_imports/components/c-form.css +176 -0
  144. package/src/lib/_imports/components/c-message.css +61 -24
  145. package/src/lib/_imports/components/cortal.icon.css +15 -6
  146. package/src/lib/_imports/components/django-cms-forms/config.yml +5 -0
  147. package/src/lib/_imports/components/django-cms-forms/django-cms-forms.hbs +404 -0
  148. package/src/lib/_imports/components/django-cms-forms/readme.md +20 -0
  149. package/src/lib/_imports/components/django-cms-forms.css +187 -0
  150. package/src/lib/_imports/components/django-cms-forms.hacks.css +59 -0
  151. package/src/lib/_imports/components/mui.tabs.css +30 -0
  152. package/src/lib/_imports/core-styles.base.css +54 -0
  153. package/src/lib/_imports/core-styles.cms.css +34 -0
  154. package/src/lib/_imports/core-styles.demo.css +23 -0
  155. package/src/lib/_imports/core-styles.header.css +37 -0
  156. package/src/lib/_imports/core-styles.portal.css +25 -0
  157. package/src/lib/_imports/core-styles.settings.css +9 -0
  158. package/src/lib/_imports/elements/demo.css +59 -0
  159. package/src/lib/_imports/elements/form.cms/readme.md +16 -0
  160. package/src/lib/_imports/elements/form.cms.css +5 -23
  161. package/src/lib/_imports/elements/html-elements.cms.css +3 -4
  162. package/src/lib/_imports/elements/html-elements.css +67 -0
  163. package/src/lib/_imports/elements/links/config.yml +1 -1
  164. package/src/lib/_imports/elements/links.css +3 -3
  165. package/src/lib/_imports/elements/table/config.yml +1 -4
  166. package/src/lib/_imports/elements/table/table.hbs +8 -0
  167. package/src/lib/_imports/elements/table--basic.css +13 -2
  168. package/src/lib/_imports/generics/fonts.css +21 -7
  169. package/src/lib/_imports/objects/o-fixed-header-table/config.yml +60 -0
  170. package/src/lib/_imports/objects/o-fixed-header-table/demo.css +18 -0
  171. package/src/lib/_imports/objects/o-fixed-header-table/o-fixed-header-table.hbs +3 -0
  172. package/src/lib/_imports/objects/o-fixed-header-table/readme.md +18 -0
  173. package/src/lib/_imports/objects/o-fixed-header-table.css +1 -27
  174. package/src/lib/_imports/objects/o-flex-item-table-wrap/config.yml +27 -0
  175. package/src/lib/_imports/objects/o-flex-item-table-wrap/demo.css +7 -0
  176. package/src/lib/_imports/objects/o-flex-item-table-wrap/o-flex-item-table-wrap.hbs +7 -0
  177. package/src/lib/_imports/objects/o-flex-item-table-wrap/readme.md +22 -0
  178. package/src/lib/_imports/objects/o-flex-item-table-wrap.css +0 -34
  179. package/src/lib/_imports/objects/o-float-content.css +0 -1
  180. package/src/lib/_imports/objects/o-section.css +0 -1
  181. package/src/lib/_imports/objects/o-site.css +1 -0
  182. package/src/lib/_imports/objects/o-table-wrap/config.yml +82 -0
  183. package/src/lib/_imports/objects/o-table-wrap/demo.basic.css +18 -0
  184. package/src/lib/_imports/objects/o-table-wrap/demo.extra.css +31 -0
  185. package/src/lib/_imports/objects/o-table-wrap/extra.flexible-horz.css +23 -0
  186. package/src/lib/_imports/objects/o-table-wrap/extra.overflow-hidden.css +7 -0
  187. package/src/lib/_imports/objects/o-table-wrap/extra.overflow-scroll.css +7 -0
  188. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-horz.css +4 -0
  189. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-horz.hbs +5 -0
  190. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-horz.readme.md +20 -0
  191. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-vert.css +3 -0
  192. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-vert.hbs +5 -0
  193. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-vert.readme.md +18 -0
  194. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-hidden.css +3 -0
  195. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-hidden.hbs +5 -0
  196. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-hidden.readme.md +14 -0
  197. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll-extra.css +2 -0
  198. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll-extra.hbs +18 -0
  199. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll-extra.readme.md +18 -0
  200. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll.css +5 -0
  201. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll.hbs +5 -0
  202. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll.readme.md +20 -0
  203. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap.hbs +11 -0
  204. package/src/lib/_imports/objects/o-table-wrap/readme.md +24 -0
  205. package/src/lib/_imports/objects/o-table-wrap.css +5 -0
  206. package/src/lib/_imports/settings/color.css +29 -11
  207. package/src/lib/_imports/settings/font.css +2 -0
  208. package/src/lib/_imports/{elements/links/docs.css → tools/x-link/demo.css} +0 -0
  209. package/src/lib/_imports/tools/x-link.css +0 -3
  210. package/src/lib/_imports/trumps/s-affixed-input-wrapper/{readme.md → README.md} +0 -0
  211. package/src/lib/_imports/trumps/s-affixed-input-wrapper/config.yml +2 -4
  212. package/src/lib/_imports/trumps/s-affixed-input-wrapper/s-affixed-input-wrapper.hbs +26 -24
  213. package/src/lib/_imports/trumps/s-affixed-input-wrapper.css +9 -11
  214. package/src/lib/_imports/trumps/s-cms-nav.css +11 -0
  215. package/src/lib/_imports/trumps/s-header.bootstrap.css +30 -0
  216. package/src/lib/_imports/trumps/s-header.css +1 -0
  217. package/src/lib/_imports/trumps/s-inline-dl.css +1 -0
  218. package/src/lib/_imports/trumps/s-irregular-links/config.yml +1 -5
  219. package/src/lib/_imports/trumps/s-portal-nav.css +11 -1
  220. package/src/lib/_imports/trumps/u-empty.css +4 -0
  221. package/src/lib/_imports/trumps/u-mailto-text-replace/config.yml +0 -3
  222. package/src/lib/_imports/trumps/u-mailto-text-replace/readme.md +1 -1
  223. package/src/lib/fonts/BentonSans-Black.otf +0 -0
  224. package/src/lib/fonts/BentonSans-RegularItalic.otf +0 -0
  225. package/dist/components/bootstrap/bootstrap--form.docs.css +0 -1
  226. package/dist/components/bootstrap/bootstrap--modal.docs.css +0 -1
  227. package/dist/components/bootstrap/bootstrap.modal/docs.css +0 -1
  228. package/dist/components/bootstrap/docs.css +0 -1
  229. package/dist/components/bootstrap/portal/bootstrap.form/docs.css +0 -1
  230. package/dist/components/bootstrap--container.css +0 -1
  231. package/dist/components/bootstrap--form/docs.css +0 -1
  232. package/dist/components/bootstrap--form.css +0 -1
  233. package/dist/components/bootstrap--modal/docs.css +0 -1
  234. package/dist/components/bootstrap--modal.css +0 -1
  235. package/dist/components/bootstrap.form/docs.css +0 -1
  236. package/dist/components/bootstrap.modal/docs.css +0 -1
  237. package/dist/components/c-button/docs.css +0 -1
  238. package/dist/elements/links/docs.css +0 -1
  239. package/dist/elements/table/docs.css +0 -1
  240. package/dist/elements/table/table.docs.css +0 -1
  241. package/dist/elements/table copy.css +0 -1
  242. package/dist/fonts/fonts/BentonSans-Bold.otf +0 -0
  243. package/dist/fonts/fonts/BentonSans-Medium.otf +0 -0
  244. package/dist/fonts/fonts/BentonSans-MediumItalic.otf +0 -0
  245. package/dist/fonts/fonts/BentonSans-Regular.otf +0 -0
  246. package/dist/fractal.server.css +0 -1
  247. package/dist/fractal.server.reload.css +0 -1
  248. package/dist/tools/x-link/docs.css +0 -1
  249. package/dist/trumps/icon.css +0 -1
  250. package/dist/trumps/icon.fonts.css +0 -1
  251. package/src/lib/_imports/_partials/bootstrap.css.hbs +0 -1
  252. package/src/lib/_imports/_partials/bootstrap.js.hbs +0 -2
  253. package/src/lib/_imports/_partials/cms.css.hbs +0 -3
  254. package/src/lib/_imports/_partials/css.hbs +0 -27
  255. package/src/lib/_imports/_preview.bootstrap-cms.hbs +0 -5
  256. package/src/lib/_imports/_preview.bootstrap.hbs +0 -5
  257. package/src/lib/_imports/_preview.cms.hbs +0 -3
  258. package/src/lib/_imports/tools/x-link/docs.css +0 -6
  259. package/src/lib/_imports/trumps/icon.css +0 -31
  260. package/src/lib/_imports/trumps/icon.fonts.css +0 -316
@@ -0,0 +1,101 @@
1
+ /** To toggle error list visibility */
2
+
3
+ /**
4
+ * @constant
5
+ * @default
6
+ * @type {object.<string,*>}
7
+ */
8
+ const DEFAULT_CLASS_NAMES = {
9
+ jsShow: 'js-show-errors',
10
+ jsHide: 'js-hide-errors'
11
+ };
12
+
13
+ /**
14
+ * @constant
15
+ * @default
16
+ * @type {object.<string,*>}
17
+ */
18
+ const DEFAULT_CALLBACKS = {
19
+ hideEach: function ( list ) {
20
+ list.style.display = 'none';
21
+ },
22
+ showEach: function ( list ) {
23
+ list.style.display = '';
24
+ },
25
+ showAll: ( lists ) => {
26
+ lists[0].scrollIntoView( false );
27
+ }
28
+ };
29
+
30
+ /**
31
+ * On each error list hide/show
32
+ * @callback onEach
33
+ * @param {HTMLElement} list
34
+ */
35
+ /**
36
+ * After all error lists are hidden/shown
37
+ * @callback afterAll
38
+ * @param {array.<HTMLElement>} lists
39
+ */
40
+
41
+ /**
42
+ * HIDE an error list
43
+ * @param {HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement} field
44
+ * @param {string} errorListClass - class on field's wrapper
45
+ */
46
+ function hideErrorList( list, classNames, callback ) {
47
+ list.classList.add( classNames.jsHide );
48
+ list.classList.remove( classNames.jsShow );
49
+ if ( typeof callback === 'function' ) {
50
+ callback( list );
51
+ }
52
+ }
53
+
54
+ /**
55
+ * SHOW an error list
56
+ * @param {HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement} field
57
+ * @param {string} errorListClass - class on field's wrapper
58
+ */
59
+ function showErrorList( list, classNames, callback ) {
60
+ list.classList.add( classNames.jsShow );
61
+ list.classList.remove( classNames.jsHide );
62
+ if ( typeof callback === 'function' ) {
63
+ callback( list );
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Toggle error lists' visibility
69
+ * @param {Document|HTMLElement} [scope=document] - where to search for lists
70
+ * @param {string} [selector] - selector to find error lists
71
+ * @param {object.<string,function>} [optCallbacks]
72
+ * @param {onEach} [optCallbacks.showEach] - on each list show
73
+ * @param {onEach} [optCallbacks.hideEach] - on each list hide
74
+ * @param {afterAll} [optCallbacks.showAll] - on all lists shown
75
+ * @param {afterAll} [optCallbacks.hideAll] - on all lists hidden
76
+ */
77
+ export default function toggleErrorLists( scope, selector, optCallbacks ) {
78
+ const classNames = DEFAULT_CLASS_NAMES;
79
+ const callbacks = Object.assign( DEFAULT_CALLBACKS, optCallbacks );
80
+ const lists = scope.querySelectorAll( selector );
81
+
82
+ let didHide = false;
83
+ let didShow = false;
84
+
85
+ [ ...lists ].forEach( list => {
86
+ if ( list.classList.contains( classNames.jsShow ) ) {
87
+ hideErrorList( list, classNames, callbacks.hideEach );
88
+ didHide = true;
89
+ } else {
90
+ showErrorList( list, classNames, callbacks.showEach );
91
+ didShow = true;
92
+ }
93
+ });
94
+
95
+ if ( didHide && typeof callbacks.hideAll === 'function' ) {
96
+ callbacks.hideAll( lists );
97
+ }
98
+ if ( didShow && typeof callbacks.showAll === 'function' ) {
99
+ callbacks.showAll( lists );
100
+ }
101
+ }
@@ -0,0 +1,85 @@
1
+ /** To toggle required attribute (and classes) of fields (and field wrappers) */
2
+
3
+ /**
4
+ * @constant
5
+ * @default
6
+ * @type {object.<string,*>}
7
+ */
8
+ const DEFAULT_CLASS_NAMES = {
9
+ errorList: null,
10
+ jsIs: 'js-is-required',
11
+ jsNot: 'js-not-required'
12
+ };
13
+
14
+ /**
15
+ * @constant
16
+ * @default
17
+ * @type {object.<string,*>}
18
+ */
19
+ const DEFAULT_OPTIONS = {
20
+ shouldScrollToFirst: false
21
+ };
22
+
23
+ /**
24
+ * Make a field NOT required (and update field wrapper accordingly)
25
+ * @param {HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement} field
26
+ * @param {string} wrapClassRequired - class on field's wrapper
27
+ */
28
+ function unRequireField( field, classNames ) {
29
+ const wrap = field.closest('.' + classNames.wrap );
30
+
31
+ field.required = false;
32
+ field.classList.add( classNames.jsNot );
33
+ field.classList.remove( classNames.jsIs );
34
+ if ( wrap && classNames.wrapRequired ) {
35
+ wrap.classList.remove( classNames.wrapRequired );
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Make a field REQUIRED (and update field wrapper accordingly)
41
+ * @param {HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement} field
42
+ * @param {string} wrapClassRequired - class on field's wrapper
43
+ */
44
+ function requireField( field, classNames ) {
45
+ const wrap = field.closest('.' + classNames.wrap );
46
+
47
+ field.required = true;
48
+ field.classList.add( classNames.jsIs );
49
+ field.classList.remove( classNames.jsNot );
50
+ if ( wrap && classNames.wrapRequired ) {
51
+ wrap.classList.add( classNames.wrapRequired );
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Toggle required attribute (and classes) of fields (and field wrappers)
57
+ * @param {Document|HTMLElement} [scope=document] - where to search for fields
58
+ * @param {string} [wrapClass] - class on all field wrappers
59
+ * @param {string} [wrapRequiredClass] - class on required fields' wrappers
60
+ * @param {object.<string,*>} [opts]
61
+ * @param {boolean} [opts.shouldScrollToFirst] - to scroll to first such field
62
+ */
63
+ export default function toggleRequiredFields( scope = document, wrapClass, wrapRequiredClass, opts ) {
64
+ const classNames = Object.assign( DEFAULT_CLASS_NAMES, {
65
+ wrap: wrapClass,
66
+ wrapRequired: wrapRequiredClass
67
+ });
68
+ const options = Object.assign( DEFAULT_OPTIONS, opts );
69
+ const requiredFields = scope.querySelectorAll(`
70
+ [required]:is(input, select, textarea),
71
+ .` + classNames.jsNot + `
72
+ `);
73
+
74
+ [ ...requiredFields ].forEach( field => {
75
+ if ( field.hasAttribute('required') ) {
76
+ unRequireField( field, classNames );
77
+ } else {
78
+ requireField( field, classNames );
79
+ }
80
+ });
81
+
82
+ if ( options.shouldScrollToFirst ) {
83
+ requiredFields[0].scrollIntoView( false );
84
+ }
85
+ }
@@ -0,0 +1,176 @@
1
+ @import url("../components/c-button.css");
2
+ @import url("../components/c-message.css");
3
+ @import url('../tools/x-link.css');
4
+
5
+
6
+
7
+ /* Title & Description */
8
+
9
+ .c-form__desc {
10
+ margin-block: 25px;
11
+ }
12
+
13
+
14
+
15
+ /* Help Text */
16
+
17
+ .c-form__help {
18
+ font-size: var(--global-font-size--small);
19
+ font-style: italic;
20
+ }
21
+ :not(
22
+ ul, /* FAQ: Lists already have margin-bottom */
23
+ label /* FAQ: Labels already have margin-bottom */
24
+ ) + .c-form__help {
25
+ margin-top: 0.3em; /* mimic Bootstrap _reboot.css label margin-bottom */
26
+ }
27
+ /* To prevent help text font-style from affecting any tags */
28
+ /* FAQ: Help text can contain inline elements like <samp> */
29
+ /* FAQ: Help text can be (ab)used to add headings between form fields */
30
+ .c-form__help > :not(details, a, samp) {
31
+ font-style: initial;
32
+ }
33
+
34
+
35
+
36
+ /* Fields */
37
+ /* TODO: Make fieldset-child <div>s be opt-out automatic field-wrappers.
38
+ 0. [ ] Define `fieldset > div { @extend .c-form__field; }` ruleset.
39
+ 1. [ ] Create `.c-form--no-auto-wrappers`.
40
+ 2. [ ] Define `.c-form:not(.c-form--no-auto-wrappers) fieldset > div` rules.
41
+ */
42
+
43
+ .c-form__field {
44
+ margin-bottom: 2rem; /* mimic <p> `margin-bottom` */
45
+ }
46
+
47
+ .c-form__field:not(.has-type-check) {
48
+ display: flex;
49
+ flex-direction: column;
50
+ }
51
+ .c-form__field:not(.has-type-check) > .c-form__errors {
52
+ order: 1; /* i.e. move to end */
53
+ }
54
+
55
+ .c-form__field.has-type-check {
56
+ display: inline-grid;
57
+
58
+ column-gap: 0.5em;
59
+ align-items: center;
60
+ grid-template-columns: min-content auto; /* shrink input, let label extend */
61
+ grid-template-areas:
62
+ 'error _____'
63
+ 'input label'
64
+ 'notes notes';
65
+ }
66
+ .c-form__field.has-type-check .c-form__errors { grid-area: error; }
67
+ .c-form__field.has-type-check input { grid-area: input; }
68
+ .c-form__field.has-type-check label { grid-area: label; }
69
+ .c-form__field.has-type-check .c-form__help { grid-area: notes; }
70
+ .c-form__field.has-type-check label {
71
+ margin-bottom: 0; /* overwrite forms.css label */
72
+ }
73
+
74
+ .c-form__field > ul:where(:not(.c-form__errors)) label {
75
+ display: flex;
76
+ gap: 0.5em;
77
+ align-items: center;
78
+ font-weight: revert; /* undo html-elements.cms.css */
79
+ }
80
+ .c-form__field > ul:where(:not(.c-form__errors)) li:last-child label {
81
+ margin-bottom: 0; /* overwrite forms.css label */
82
+ }
83
+
84
+ /* Field: Required, Asterisk, Important */
85
+
86
+ .c-form__field .c-form__star {
87
+ margin-left: 0.5em;
88
+ }
89
+ .c-form__field.has-required .c-form__star {
90
+ color: var(--global-color-danger--dark);
91
+ }
92
+ .c-form__field:not(.has-required) .c-form__star
93
+ /* NOTE: Manual markup ONLY; form plugin can't render non-required asterisk */ {
94
+ color: var(--global-color-warning--dark);
95
+ }
96
+ /* To replace asterisk character with text */
97
+ .c-form__field .c-form__star {
98
+ width: 0;
99
+ display: inline-block;
100
+ visibility: hidden;
101
+ line-height: 0;
102
+ }
103
+ .c-form__field .c-form__star::after {
104
+ visibility: visible;
105
+ line-height: initial;
106
+ }
107
+ .c-form__field.has-required .c-form__star::after {
108
+ content: '(required)';
109
+ }
110
+ .c-form__field:not(.has-required) .c-form__star::after
111
+ /* NOTE: Manual markup ONLY; form plugin can't render non-required asterisk */ {
112
+ content: '(important)';
113
+ }
114
+
115
+
116
+
117
+ /* Errors */
118
+
119
+ .c-form__field ul.c-form__errors {
120
+ margin-top: 1rem; /* mimic ul margin-bottom */
121
+ margin-bottom: 0; /* overwrite ul margin-bottom */
122
+ }
123
+
124
+ ul.c-form__errors {
125
+ list-style: none;
126
+ padding-inline: 0;
127
+ }
128
+
129
+ .c-form > .c-form__errors {
130
+ @extend .c-message;
131
+ @extend .c-message--type-error;
132
+ @extend .c-message--scope-section;
133
+ @extend .c-message--scope-section.c-message--type-error;
134
+ }
135
+ .c-form__field .c-form__errors li {
136
+ @extend .c-message;
137
+ @extend .c-message--type-error;
138
+ @extend .c-message--scope-inline;
139
+ }
140
+
141
+
142
+
143
+ /* Lists */
144
+
145
+ .c-form__field > ul:where(:not(.c-form__errors)) {
146
+ list-style: none;
147
+
148
+ padding-left: 0;
149
+ }
150
+
151
+
152
+
153
+ /* Buttons */
154
+
155
+ .c-form__buttons {
156
+ margin-top: 35px;
157
+ }
158
+
159
+ /* To style obvious buttons that neglect class */
160
+ .c-form__buttons button[type="submit"] {
161
+ @extend .c-button;
162
+ @extend .c-button--primary;
163
+ }
164
+
165
+ .c-form__button {
166
+ @extend .c-button;
167
+ }
168
+ .c-form__button[type="submit"] {
169
+ @extend .c-button--primary;
170
+ }
171
+ .c-form__button:where(:not([type="submit"], [type="reset"])) {
172
+ @extend .c-button--secondary;
173
+ }
174
+ .c-form__button[type="reset"] {
175
+ @extend .c-button--tertiary;
176
+ }
@@ -3,51 +3,88 @@ Message
3
3
 
4
4
  Inform user about a temporary status.
5
5
 
6
- - .c-message--info - neither positive nor negative
7
- - .c-message--success - a positive status
8
- - .c-message--warning - a minor negative status
9
- - .c-message--danger - a major negative status
6
+ - .c-message--type-info - neither positive nor negative
7
+ - .c-message--type-success - a positive status
8
+ - .c-message--type-warning - a minor negative status
9
+ - .c-message--type-danger - a major negative status
10
+ - .c-message--scope-inline - an error for one interatction on a page
11
+ - .c-message--scope-section - an error for a whole section of a page
10
12
 
11
13
  Reference:
12
14
  - https://getbootstrap.com/docs/4.0/components/alerts/
13
15
 
14
16
  Styleguide Components.Message
15
17
  */
16
- @import url('../settings/color.css');
18
+ @import url('../tools/x-link.css');
17
19
 
18
- /* Base */
19
20
 
20
- .c-message {
21
- padding: 15px 20px;
22
- border: var(--global-border--thick);
23
- font-size: var(--global-font-size--small);
24
- }
25
21
 
26
22
  /* Elements */
27
23
 
28
- .c-message a {
29
- color: inherit;
24
+ /* To avoid clash of link color with message color */
25
+ .c-message a,
26
+ .c-message .c-button--as-link {
27
+ color: inherit !important; /* override :hover and :active */
28
+ }
29
+
30
+ /* To distinguish link from message text */
31
+ .c-message a,
32
+ .c-message .c-button--as-link {
33
+ @extend .x-link--irregular;
34
+ }
35
+ .c-message a:hover,
36
+ .c-message .c-button--as-link:hover {
37
+ @extend .x-link--irregular--hover;
38
+ }
39
+ .c-message a:active,
40
+ .c-message .c-button--as-link:active {
41
+ @extend .x-link--irregular--active;
30
42
  }
31
43
 
44
+
45
+
32
46
  /* Modifiers */
33
47
 
34
- .c-message--info {
48
+ /* Structure */
49
+
50
+ .c-message--scope-inline,
51
+ .c-message--scope-section {
52
+ font-size: var(--global-font-size--small);
53
+ }
54
+
55
+ .c-message--scope-section {
56
+ padding: 15px 20px;
57
+ border: var(--global-border--thick);
58
+ }
59
+
60
+ /* Skin */
61
+
62
+ .c-message--type-info {
35
63
  color: var(--global-color-info--dark);
36
- background-color: var(--global-color-info--light);
37
- border-color: var(--global-color-info--normal);
38
64
  }
39
- .c-message--success {
65
+ .c-message--type-success {
40
66
  color: var(--global-color-success--dark);
41
- background-color: var(--global-color-success--weak);
42
- border-color: var(--global-color-success--normal);
43
67
  }
44
- .c-message--warning {
68
+ .c-message--type-warning {
45
69
  color: var(--global-color-warning--dark);
46
- background-color: var(--global-color-warning--weak);
47
- border-color: var(--global-color-warning--normal);
48
70
  }
49
- .c-message--error {
71
+ .c-message--type-error {
50
72
  color: var(--global-color-danger--dark);
51
- background-color: var(--global-color-danger--weak);
73
+ }
74
+
75
+ .c-message--scope-section.c-message--type-info {
76
+ background-color: var(--global-color-info--x-light);
77
+ border-color: var(--global-color-info--normal);
78
+ }
79
+ .c-message--scope-section.c-message--type-success {
80
+ background-color: var(--global-color-success--x-light);
81
+ border-color: var(--global-color-success--normal);
82
+ }
83
+ .c-message--scope-section.c-message--type-warning {
84
+ background-color: var(--global-color-warning--x-light);
85
+ border-color: var(--global-color-warning--normal);
86
+ }
87
+ .c-message--scope-section.c-message--type-error {
88
+ background-color: var(--global-color-danger--x-light);
52
89
  border-color: var(--global-color-danger--normal);
53
90
  }
@@ -61,19 +61,28 @@ Styleguide Components.Cortal.Icon
61
61
  [class*='icon-nav-'] {
62
62
  border: solid var(--color, var(--global-color-primary--xx-dark));
63
63
  border-width: 0 0.25em 0.25em 0;
64
- font-size: 8px;
64
+ font-size: 8px; /* thus 1px = 0.125em */
65
65
  /* display: inline-block; */ /* let `.icon`'s `display: inline-flex;` do it */
66
66
  /* padding: var(--size); */ /* let `.icon`'s equal `width` & `height` do it */
67
67
  }
68
+ /* To rotate icon each direction and move graphic to stay within icon box */
69
+ /* NOTE: For '-up' and '-down':
70
+ - translate gave (sub-pixel) better horz. align than relative position
71
+ - relative position gave easier vertical alignment
72
+ So 'left' and 'right' (for consistency) use translate for horz. move */
68
73
  .icon-nav-up {
69
- transform: rotate(-135deg);
74
+ position: relative;
75
+ top: 2px;
76
+ transform: rotate(-135deg) translate(-1px, 1px);
70
77
  }
71
78
  .icon-nav-left {
72
- transform: rotate(135deg);
79
+ transform: rotate(135deg) translate(-1px, -1px);
73
80
  }
74
81
  .icon-nav-down {
75
- transform: rotate(45deg);
82
+ position: relative;
83
+ top: -2px;
84
+ transform: rotate(45deg) translate(1px, -1px);
76
85
  }
77
86
  .icon-nav-right {
78
- transform: rotate(-45deg);
79
- }
87
+ transform: rotate(-45deg) translate(-1px, -1px);
88
+ }
@@ -0,0 +1,5 @@
1
+ context:
2
+ # only for temp demo instance of this pattern (which should be in CMS)
3
+ shouldLoadCMS: true # because this is demo but this is CMS pattern
4
+ shouldSkipPattern: false # because …base.css does not load this CMS pattern
5
+ label: Django CMS Forms