cx 26.0.6 → 26.0.9

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 (134) hide show
  1. package/build/charts/Bar.scss +29 -0
  2. package/build/charts/BarGraph.scss +29 -0
  3. package/build/charts/BubbleGraph.scss +32 -0
  4. package/build/charts/Column.scss +29 -0
  5. package/build/charts/ColumnGraph.scss +30 -0
  6. package/build/charts/Gridlines.scss +25 -0
  7. package/build/charts/Legend.scss +50 -0
  8. package/build/charts/LegendEntry.scss +29 -0
  9. package/build/charts/LineGraph.d.ts +11 -0
  10. package/build/charts/LineGraph.js +1 -0
  11. package/build/charts/LineGraph.scss +25 -0
  12. package/build/charts/Marker.scss +44 -0
  13. package/build/charts/MarkerLine.scss +20 -0
  14. package/build/charts/PieChart.scss +29 -0
  15. package/build/charts/Range.scss +20 -0
  16. package/build/charts/RangeMarker.scss +17 -0
  17. package/build/charts/ScatterGraph.scss +24 -0
  18. package/build/charts/Swimlane.scss +16 -0
  19. package/build/charts/Swimlanes.scss +16 -0
  20. package/build/charts/axis/Axis.scss +23 -0
  21. package/build/charts/axis/CategoryAxis.scss +35 -0
  22. package/build/charts/axis/NumericAxis.scss +35 -0
  23. package/build/charts/axis/TimeAxis.scss +34 -0
  24. package/build/charts/axis/index.scss +5 -0
  25. package/build/charts/axis/variables.scss +3 -0
  26. package/build/charts/index.scss +22 -0
  27. package/build/charts/palette.scss +97 -0
  28. package/build/charts/variables.scss +22 -0
  29. package/build/global.scss +14 -0
  30. package/build/index.scss +6 -0
  31. package/build/jsx-runtime.d.ts +3 -2
  32. package/build/svg/Svg.scss +28 -0
  33. package/build/svg/index.scss +9 -0
  34. package/build/ui/index.scss +2 -0
  35. package/build/ui/layout/LabelsLeftLayout.scss +47 -0
  36. package/build/ui/layout/LabelsTopLayout.scss +65 -0
  37. package/build/ui/layout/index.scss +3 -0
  38. package/build/ui/layout/variables.scss +2 -0
  39. package/build/ui/variables.scss +2 -0
  40. package/build/util/addEventListenerWithOptions.d.ts +2 -2
  41. package/build/util/call-once.scss +7 -0
  42. package/build/util/index.scss +11 -0
  43. package/build/util/scss/add-rules.scss +40 -0
  44. package/build/util/scss/calc.scss +45 -0
  45. package/build/util/scss/call-once.scss +13 -0
  46. package/build/util/scss/clockwise.scss +49 -0
  47. package/build/util/scss/colors.scss +10 -0
  48. package/build/util/scss/deep-get.scss +12 -0
  49. package/build/util/scss/deep-merge.scss +21 -0
  50. package/build/util/scss/divide.scss +3 -0
  51. package/build/util/scss/include.scss +48 -0
  52. package/build/util/scss/index.scss +9 -0
  53. package/build/variables.scss +217 -0
  54. package/build/widgets/Button.scss +119 -0
  55. package/build/widgets/Button.variables.scss +117 -0
  56. package/build/widgets/CxCredit.scss +39 -0
  57. package/build/widgets/FlexBox.scss +148 -0
  58. package/build/widgets/Heading.scss +40 -0
  59. package/build/widgets/HighlightedSearchText.scss +20 -0
  60. package/build/widgets/Icon.scss +22 -0
  61. package/build/widgets/List.scss +93 -0
  62. package/build/widgets/ProgressBar.scss +51 -0
  63. package/build/widgets/Resizer.scss +44 -0
  64. package/build/widgets/Section.scss +56 -0
  65. package/build/widgets/animations.scss +11 -0
  66. package/build/widgets/drag-drop/DragClone.scss +36 -0
  67. package/build/widgets/drag-drop/DragHandle.scss +19 -0
  68. package/build/widgets/drag-drop/DragSource.scss +27 -0
  69. package/build/widgets/drag-drop/DropZone.scss +77 -0
  70. package/build/widgets/drag-drop/index.scss +4 -0
  71. package/build/widgets/drag-drop/variables.scss +15 -0
  72. package/build/widgets/form/Calendar.scss +199 -0
  73. package/build/widgets/form/Calendar.variables.scss +64 -0
  74. package/build/widgets/form/Checkbox.scss +129 -0
  75. package/build/widgets/form/Checkbox.variables.scss +40 -0
  76. package/build/widgets/form/ColorField.scss +98 -0
  77. package/build/widgets/form/ColorPicker.scss +285 -0
  78. package/build/widgets/form/ColorPicker.variables.scss +22 -0
  79. package/build/widgets/form/DateTimeField.scss +92 -0
  80. package/build/widgets/form/DateTimePicker.scss +47 -0
  81. package/build/widgets/form/Field.scss +164 -0
  82. package/build/widgets/form/HelpText.scss +24 -0
  83. package/build/widgets/form/Label.scss +38 -0
  84. package/build/widgets/form/LookupField.scss +221 -0
  85. package/build/widgets/form/MonthField.scss +100 -0
  86. package/build/widgets/form/MonthPicker.scss +125 -0
  87. package/build/widgets/form/NumberField.scss +63 -0
  88. package/build/widgets/form/Radio.scss +123 -0
  89. package/build/widgets/form/Radio.variables.scss +46 -0
  90. package/build/widgets/form/Select.scss +101 -0
  91. package/build/widgets/form/Slider.scss +121 -0
  92. package/build/widgets/form/Switch.scss +142 -0
  93. package/build/widgets/form/TextArea.scss +45 -0
  94. package/build/widgets/form/TextField.scss +57 -0
  95. package/build/widgets/form/UploadButton.scss +49 -0
  96. package/build/widgets/form/ValidationError.scss +23 -0
  97. package/build/widgets/form/Wheel.scss +152 -0
  98. package/build/widgets/form/index.scss +24 -0
  99. package/build/widgets/form/variables.scss +355 -0
  100. package/build/widgets/grid/Grid.scss +640 -0
  101. package/build/widgets/grid/Pagination.scss +115 -0
  102. package/build/widgets/grid/TreeNode.scss +90 -0
  103. package/build/widgets/grid/index.scss +4 -0
  104. package/build/widgets/grid/variables.scss +137 -0
  105. package/build/widgets/index.scss +16 -0
  106. package/build/widgets/nav/Link.scss +20 -0
  107. package/build/widgets/nav/Menu.scss +76 -0
  108. package/build/widgets/nav/Menu.variables.scss +25 -0
  109. package/build/widgets/nav/MenuItem.d.ts +1 -0
  110. package/build/widgets/nav/MenuItem.scss +130 -0
  111. package/build/widgets/nav/Scroller.scss +148 -0
  112. package/build/widgets/nav/Tab.scss +82 -0
  113. package/build/widgets/nav/Tab.variables.scss +84 -0
  114. package/build/widgets/nav/cover.scss +22 -0
  115. package/build/widgets/nav/index.scss +6 -0
  116. package/build/widgets/nav/variables.scss +27 -0
  117. package/build/widgets/overlay/Dropdown.scss +186 -0
  118. package/build/widgets/overlay/Overlay.scss +68 -0
  119. package/build/widgets/overlay/Toast.scss +164 -0
  120. package/build/widgets/overlay/Tooltip.scss +177 -0
  121. package/build/widgets/overlay/Window.scss +129 -0
  122. package/build/widgets/overlay/Window.variables.scss +62 -0
  123. package/build/widgets/overlay/captureMouse.scss +13 -0
  124. package/build/widgets/overlay/index.scss +15 -0
  125. package/build/widgets/overlay/variables.scss +85 -0
  126. package/build/widgets/variables.scss +146 -0
  127. package/build.js +4 -0
  128. package/dist/charts.js +1 -0
  129. package/dist/manifest.js +876 -770
  130. package/package.json +4 -2
  131. package/src/charts/LineGraph.tsx +14 -0
  132. package/src/jsx-runtime.ts +8 -5
  133. package/src/util/addEventListenerWithOptions.ts +41 -41
  134. package/src/widgets/nav/MenuItem.tsx +1 -0
@@ -0,0 +1,97 @@
1
+ //https://www.materialui.co/colors
2
+ //normal:200 900
3
+ //hover:100 700
4
+ //selected: 300 900
5
+ //disabled: 0 100
6
+ @use "sass:map";
7
+ @use "sass:list";
8
+
9
+ $cx-default-palette-colors: rgba(244, 67, 54, 1) rgba(233, 30, 99, 1) rgba(156, 39, 176, 1) rgba(103, 58, 183, 1)
10
+ rgba(63, 81, 181, 1) rgba(33, 150, 243, 1) rgba(3, 169, 244, 1) rgba(0, 188, 212, 1) rgba(0, 150, 136, 1)
11
+ rgba(76, 175, 80, 1) rgba(139, 195, 74, 1) rgba(205, 220, 57, 1) rgba(255, 235, 59, 1) rgba(255, 193, 7, 1)
12
+ rgba(255, 152, 0, 1) rgba(255, 87, 34, 1) !default;
13
+
14
+ $cx-default-palette-fill-whiten: 60% !default;
15
+ $cx-default-palette-fill-hover-whiten: 50% !default;
16
+ $cx-default-palette-fill-selected-whiten: 20% !default;
17
+ $cx-default-palette-fill-disabled-whiten: 90% !default;
18
+
19
+ $cx-default-palette-fill-blacken: 0% !default;
20
+ $cx-default-palette-fill-hover-blacken: 0% !default;
21
+ $cx-default-palette-fill-selected-blacken: 0% !default;
22
+ $cx-default-palette-fill-disabled-blacken: 0% !default;
23
+
24
+ $cx-default-palette-stroke-whiten: 0% !default;
25
+ $cx-default-palette-stroke-blacken: 10% !default;
26
+
27
+ @mixin cx-palette(
28
+ $palette-colors: $cx-default-palette-colors,
29
+ $palette-fill-whiten: $cx-default-palette-fill-whiten,
30
+ $palette-fill-hover-whiten: $cx-default-palette-fill-hover-whiten,
31
+ $palette-fill-selected-whiten: $cx-default-palette-fill-selected-whiten,
32
+ $palette-fill-disabled-whiten: $cx-default-palette-fill-disabled-whiten,
33
+ $palette-fill-blacken: $cx-default-palette-fill-blacken,
34
+ $palette-fill-hover-blacken: $cx-default-palette-fill-hover-blacken,
35
+ $palette-fill-selected-blacken: $cx-default-palette-fill-selected-blacken,
36
+ $palette-fill-disabled-blacken: $cx-default-palette-fill-disabled-blacken,
37
+ $palette-stroke-whiten: $cx-default-palette-stroke-whiten,
38
+ $palette-stroke-blacken: $cx-default-palette-stroke-blacken,
39
+ $besm: $cx-besm
40
+ ) {
41
+ $block: map.get($besm, block);
42
+ $element: map.get($besm, element);
43
+ $state: map.get($besm, state);
44
+
45
+ @for $i from 1 through list.length($palette-colors) {
46
+ $c: list.nth($palette-colors, 1 + (($i - 1) * 1) % list.length($palette-colors));
47
+
48
+ .#{$state}color-#{$i - 1} {
49
+ $fill: cx-blacken(cx-whiten($c, $palette-fill-whiten), $palette-fill-blacken);
50
+ $stroke: cx-blacken(cx-whiten($fill, $palette-stroke-whiten), $palette-stroke-blacken);
51
+ fill: $fill;
52
+ stroke: $stroke;
53
+ background: $fill;
54
+ border-color: $stroke;
55
+
56
+ &.#{$state}selectable:hover,
57
+ &.#{$state}selectable.#{$state}hover,
58
+ .#{$state}color-root:hover &,
59
+ .#{$state}color-root.#{$state}hover & {
60
+ $fill: cx-blacken(cx-whiten($c, $palette-fill-hover-whiten), $palette-fill-hover-blacken);
61
+ $stroke: cx-blacken(cx-whiten($fill, $palette-stroke-whiten), $palette-stroke-blacken);
62
+ fill: $fill;
63
+ stroke: $stroke;
64
+ background: $fill;
65
+ border-color: $stroke;
66
+ }
67
+
68
+ &.#{$state}selected,
69
+ &.#{$state}selected:hover,
70
+ &.#{$state}selected.#{$state}hover,
71
+ .#{$state}color-root.#{$state}selected &,
72
+ .#{$state}color-root.#{$state}selected:hover &,
73
+ .#{$state}color-root.#{$state}selected.#{$state}hover & {
74
+ $fill: cx-blacken(cx-whiten($c, $palette-fill-selected-whiten), $palette-fill-selected-blacken);
75
+ $stroke: cx-blacken(cx-whiten($fill, $palette-stroke-whiten), $palette-stroke-blacken);
76
+ fill: $fill;
77
+ stroke: $stroke;
78
+ background: $fill;
79
+ border-color: $stroke;
80
+ }
81
+
82
+ &.#{$state}disabled,
83
+ .#{$state}color-root.#{$state}disabled & {
84
+ $fill: cx-blacken(cx-whiten($c, $palette-fill-disabled-whiten), $palette-fill-disabled-blacken);
85
+ $stroke: cx-blacken(cx-whiten($fill, $palette-stroke-whiten), $palette-stroke-blacken);
86
+ fill: $fill;
87
+ stroke: $stroke;
88
+ background: $fill;
89
+ border-color: $stroke;
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ @if (cx-should-include("cx/charts/palette")) {
96
+ @include cx-palette();
97
+ }
@@ -0,0 +1,22 @@
1
+ @use "sass:map";
2
+ @import "axis/variables";
3
+
4
+ $cx-default-swimlanes-lane-background-color: #f1f1f1;
5
+ $cx-default-range-marker-color: #696969;
6
+
7
+ $cx-dependencies: map.merge(
8
+ $cx-dependencies,
9
+ (
10
+ "cx/charts/Bar": "cx/charts/palette",
11
+ "cx/charts/BarGraph": "cx/charts/palette",
12
+ "cx/charts/Column": "cx/charts/palette",
13
+ "cx/charts/ColumnGraph": "cx/charts/palette",
14
+ "cx/charts/LineGraph": "cx/charts/palette",
15
+ "cx/charts/ColorMap": "cx/charts/palette",
16
+ "cx/charts/ScatterGraph": "cx/charts/palette",
17
+ "cx/charts/BubbleGraph": "cx/charts/palette",
18
+ "cx/charts/MarkerLine": "cx/charts/palette",
19
+ "cx/charts/Marker": "cx/charts/palette",
20
+ "cx/charts/PieChart": "cx/charts/palette",
21
+ )
22
+ );
@@ -0,0 +1,14 @@
1
+
2
+ $cx-include-global-rules: false !default;
3
+
4
+ @mixin cx-global-rules() {
5
+ @each $tag, $styles in $cx-element-style-map {
6
+ #{$tag} {
7
+ @include cx-add-rules($styles)
8
+ }
9
+ }
10
+ }
11
+
12
+ @if ($cx-include-global-rules and cx-call-once('cx/globals')) {
13
+ @include cx-global-rules();
14
+ }
@@ -0,0 +1,6 @@
1
+ @import "global";
2
+ @import "util/index";
3
+ @import "ui/index";
4
+ @import "widgets/index";
5
+ @import "svg/index";
6
+ @import "charts/index";
@@ -1,15 +1,16 @@
1
1
  import type { JSX as ReactJSX } from "react";
2
2
  import { Instance } from "./ui/Instance";
3
- import type { Prop } from "./ui/Prop";
3
+ import type { ClassProp, Prop } from "./ui/Prop";
4
4
  import { Widget } from "./ui/Widget";
5
5
  import { HtmlElementConfig } from "./widgets/HtmlElement";
6
+ import { ChildNode } from "./ui/Container";
6
7
  export declare function jsx(typeName: any, props: any, key?: string): any;
7
8
  export declare const jsxs: typeof jsx;
8
9
  type ReactIntrinsicElements = ReactJSX.IntrinsicElements;
9
10
  type IsEventHandler<K, T> = K extends `on${string}` ? (T extends Function ? true : false) : false;
10
11
  type CxEventHandler<T> = T extends (event: infer E) => any ? string | ((event: E, instance: Instance) => void) : string | T;
11
12
  type CxIntrinsicElement<T> = {
12
- [K in keyof T]: K extends "children" ? any : IsEventHandler<K, T[K]> extends true ? CxEventHandler<T[K]> : Prop<T[K]>;
13
+ [K in keyof T]: K extends "children" ? ChildNode | ChildNode[] : K extends "className" | "class" ? ClassProp : IsEventHandler<K, T[K]> extends true ? CxEventHandler<T[K]> : Prop<T[K]>;
13
14
  } & HtmlElementConfig;
14
15
  type CxIntrinsicElements = {
15
16
  [K in keyof ReactIntrinsicElements]: CxIntrinsicElement<ReactIntrinsicElements[K]>;
@@ -0,0 +1,28 @@
1
+ @use "sass:map";
2
+
3
+ @mixin cx-svg(
4
+ $name: 'svg',
5
+ $besm: $cx-besm
6
+ ) {
7
+ $block: map.get($besm, block);
8
+ $element: map.get($besm, element);
9
+ $state: map.get($besm, state);
10
+ $mod: map.get($besm, mod);
11
+
12
+ .#{$block}#{$name} {
13
+ box-sizing: border-box;
14
+ overflow: hidden;
15
+ position: relative;
16
+ height: 150px; //default height
17
+
18
+ & > svg {
19
+ width: 100%;
20
+ height: 100%;
21
+ position: absolute;
22
+ }
23
+ }
24
+ }
25
+
26
+ @if (cx-should-include('cx/svg/Svg')) {
27
+ @include cx-svg;
28
+ }
@@ -0,0 +1,9 @@
1
+ .cxs-text-anchor-middle {
2
+ text-anchor: middle;
3
+ }
4
+
5
+ .cxs-text-anchor-right {
6
+ text-anchor: end;
7
+ }
8
+
9
+ @import "Svg";
@@ -0,0 +1,2 @@
1
+
2
+ @import 'layout/index';
@@ -0,0 +1,47 @@
1
+
2
+ @use "sass:map";
3
+
4
+ @mixin cx-labelsleftlayout(
5
+ $name: 'labelsleftlayout',
6
+ $besm: $cx-besm
7
+ ) {
8
+ $block: map.get($besm, block);
9
+ $element: map.get($besm, element);
10
+ $state: map.get($besm, state);
11
+ $mod: map.get($besm, mod);
12
+
13
+ .#{$block}labelsleftlayout {
14
+ border-spacing: 0;
15
+
16
+ &.#{$mod}stretch {
17
+ width: 100%;
18
+
19
+ .#{$element}labelsleftlayout-label {
20
+ width: 5em;
21
+
22
+ .#{$block}label {
23
+ white-space: nowrap;
24
+ }
25
+ }
26
+ }
27
+ }
28
+
29
+ .#{$element}labelsleftlayout-field {
30
+ padding: 5px 0 5px 5px;
31
+ }
32
+
33
+ .#{$element}labelsleftlayout-label {
34
+ text-align: right;
35
+ vertical-align: top;
36
+
37
+ padding: 5px 5px 5px 0;
38
+
39
+ .#{$block}label {
40
+ padding-right: 0;
41
+ }
42
+ }
43
+ }
44
+
45
+ @if (cx-should-include('cx/ui/LabelsLeftLayout')) {
46
+ @include cx-labelsleftlayout();
47
+ }
@@ -0,0 +1,65 @@
1
+ @use "sass:map";
2
+
3
+ @mixin cx-labelstoplayout(
4
+ $name: 'labelstoplayout',
5
+ $besm: $cx-besm
6
+ ) {
7
+ $block: map.get($besm, block);
8
+ $element: map.get($besm, element);
9
+ $state: map.get($besm, state);
10
+ $mod: map.get($besm, mod);
11
+
12
+ .#{$block}labelstoplayout {
13
+ border-spacing: 0 3px;
14
+
15
+ &.#{$mod}stretch {
16
+ width: 100%;
17
+
18
+ //unsure what it does
19
+ //.#{$element}labelstoplayout-label {
20
+ // width: 10em;
21
+ //}
22
+ }
23
+ }
24
+
25
+ .#{$element}labelstoplayout-field {
26
+ padding: 0 5px;
27
+ box-sizing: border-box;
28
+ vertical-align: top;
29
+
30
+ &:first-child {
31
+ padding-left: 0;
32
+ }
33
+
34
+ &:last-child {
35
+ padding-right: 0;
36
+ }
37
+ }
38
+
39
+ .#{$element}labelstoplayout-label {
40
+ vertical-align: bottom;
41
+ padding: 5px 5px 0 5px;
42
+ box-sizing: border-box;
43
+
44
+ .#{$block}label {
45
+ padding-left: 0;
46
+ padding-bottom: 0;
47
+ }
48
+
49
+ &:first-child {
50
+ padding-left: 0;
51
+ }
52
+
53
+ &:last-child {
54
+ padding-right: 0;
55
+ }
56
+ }
57
+
58
+ .#{$mod}fixed {
59
+ table-layout: fixed;
60
+ }
61
+ }
62
+
63
+ @if (cx-should-include('cx/ui/LabelsTopLayout')) {
64
+ @include cx-labelstoplayout();
65
+ }
@@ -0,0 +1,3 @@
1
+
2
+ @import "LabelsLeftLayout";
3
+ @import "LabelsTopLayout";
@@ -0,0 +1,2 @@
1
+
2
+ // Layout variables
@@ -0,0 +1,2 @@
1
+
2
+ @import "layout/variables";
@@ -12,6 +12,6 @@ interface EventMap {
12
12
  keyup: KeyboardEvent;
13
13
  keypress: KeyboardEvent;
14
14
  }
15
- export declare function addEventListenerWithOptions<K extends keyof EventMap>(element: Element, event: K, callback: (event: EventMap[K]) => void, options: AddEventListenerOptions): () => void;
16
- export declare function addEventListenerWithOptions(element: Element, event: string, callback: (event: Event) => void, options: AddEventListenerOptions): () => void;
15
+ export declare function addEventListenerWithOptions<K extends keyof EventMap>(element: Element | Document, event: K, callback: (event: EventMap[K]) => void, options: AddEventListenerOptions): () => void;
16
+ export declare function addEventListenerWithOptions(element: Element | Document, event: string, callback: (event: Event) => void, options: AddEventListenerOptions): () => void;
17
17
  export {};
@@ -0,0 +1,7 @@
1
+ $cx-call-once-data: () !default;
2
+
3
+ @function cx-call-once($name) {
4
+ $result: map_get($cx-call-once-data, $name);
5
+ $cx-call-once-data: map_merge($cx-call-once-data, ($name: true)) !global;
6
+ @return $result != true;
7
+ }
@@ -0,0 +1,11 @@
1
+ .cx-text-left.cx-text-left {
2
+ text-align: left;
3
+ }
4
+
5
+ .cx-text-right.cx-text-right {
6
+ text-align: right;
7
+ }
8
+
9
+ .cx-text-center.cx-text-center {
10
+ text-align: center;
11
+ }
@@ -0,0 +1,40 @@
1
+ @use "sass:map";
2
+
3
+ @mixin cx-add-rules($styles) {
4
+ @each $rule, $value in $styles {
5
+ #{$rule}: $value;
6
+ }
7
+ }
8
+
9
+ @mixin cx-add-state-rules($state-style-map, $key) {
10
+ @include cx-add-rules(map.get($state-style-map, $key));
11
+ }
12
+
13
+ @function cx-merge-state-style-maps($state-style-map, $override-style-map) {
14
+ $result: $state-style-map;
15
+
16
+ @if ($override-style-map != null) {
17
+ @each $key, $new-value in $override-style-map {
18
+ $old-value: map.get($state-style-map, $key);
19
+ @if ($old-value != null) {
20
+ $new-value: map.merge($old-value, $new-value);
21
+ }
22
+ $result: map.merge(
23
+ $result,
24
+ (
25
+ $key: $new-value,
26
+ )
27
+ );
28
+ }
29
+ }
30
+
31
+ @return $result;
32
+ }
33
+
34
+ @function cx-get-state-rule($state-style-map, $key, $rule, $default: null) {
35
+ $result: map.get(map.get($state-style-map, $key), $rule);
36
+ @if ($result != null) {
37
+ @return $result;
38
+ }
39
+ @return $default;
40
+ }
@@ -0,0 +1,45 @@
1
+ @use "sass:list";
2
+ @use "sass:map";
3
+ @use "sass:math";
4
+
5
+ @function cx-calc($lengths...) {
6
+ $units: ();
7
+
8
+ @each $l in $lengths {
9
+ $unit: math.unit($l);
10
+ @if (map.has-key($units, $unit)) {
11
+ $nl: map.get($units, $unit) + $l;
12
+ $units: map.merge($units, ($unit: $nl))
13
+ } @else {
14
+ $units: map.merge($units, ($unit: $l))
15
+ }
16
+ }
17
+
18
+ $keys: map.keys($units);
19
+ @if (list.length($keys) == 1) {
20
+ @return map.get($units, list.nth($keys, 1));
21
+ }
22
+
23
+ $calc: '';
24
+ $count: 0;
25
+
26
+ @each $u, $v in $units {
27
+ @if ($v != 0) {
28
+ $count: $count + 1;
29
+ @if ($count > 1) {
30
+ $calc: $calc + ' + ';
31
+ }
32
+ $calc: $calc + $v;
33
+ }
34
+ }
35
+
36
+ @if ($count == 0) {
37
+ @return 0;
38
+ }
39
+
40
+ @if ($count == 1) {
41
+ @return #{$calc};
42
+ }
43
+
44
+ @return #{'calc(' + $calc + ')'};
45
+ }
@@ -0,0 +1,13 @@
1
+ @use "sass:map";
2
+
3
+ $cx-call-once-data: () !default;
4
+
5
+ @function cx-call-once($name) {
6
+ $result: map.get($cx-call-once-data, $name);
7
+ $cx-call-once-data: map.merge($cx-call-once-data, ($name: true)) !global;
8
+ @return $result != true;
9
+ }
10
+
11
+ @function cx-called-once($name) {
12
+ @return map.get($cx-call-once-data, $name);
13
+ }
@@ -0,0 +1,49 @@
1
+ @use "sass:list";
2
+
3
+ @function cx-top($list) {
4
+ @if (list.length($list) > 0) {
5
+ @return list.nth($list, 1);
6
+ }
7
+ @return null;
8
+ }
9
+
10
+ @function cx-right($list) {
11
+ @if (list.length($list) == 1) {
12
+ @return list.nth($list, 1);
13
+ }
14
+ @if (list.length($list) > 1) {
15
+ @return list.nth($list, 2);
16
+ }
17
+ @return null;
18
+ }
19
+
20
+ @function cx-bottom($list) {
21
+ @if (list.length($list) > 2) {
22
+ @return list.nth($list, 3);
23
+ }
24
+
25
+ @if (list.length($list) >= 1) {
26
+ @return list.nth($list, 1);
27
+ }
28
+
29
+ @return null;
30
+ }
31
+
32
+ @function cx-left($list) {
33
+ @if (list.length($list) == 1) {
34
+ @return list.nth($list, 1);
35
+ }
36
+
37
+ @if (list.length($list) == 2) {
38
+ @return list.nth($list, 2);
39
+ }
40
+
41
+ @if (list.length($list) == 3) {
42
+ @return list.nth($list, 2);
43
+ }
44
+
45
+ @if (list.length($list) == 4) {
46
+ @return list.nth($list, 4);
47
+ }
48
+ @return null;
49
+ }
@@ -0,0 +1,10 @@
1
+
2
+ @use "sass:color";
3
+
4
+ @function cx-whiten($color, $percentage) {
5
+ @return color.mix(white, $color, $percentage);
6
+ }
7
+
8
+ @function cx-blacken($color, $percentage) {
9
+ @return color.mix(black, $color, $percentage);
10
+ }
@@ -0,0 +1,12 @@
1
+ @use "sass:map";
2
+
3
+ @function cx-map-deep-get($map, $keys...){
4
+ @each $key in $keys {
5
+ $map: map.get($map, $key)
6
+ }
7
+ @if $map != null {
8
+ @return $map
9
+ } @else {
10
+ @return null
11
+ }
12
+ };
@@ -0,0 +1,21 @@
1
+ @use "sass:map";
2
+ @use "sass:meta";
3
+
4
+ @function cx-deep-map-merge($parent-map, $child-map) {
5
+ $result: $parent-map;
6
+ @each $key, $value in $child-map {
7
+ //If the parent map does not have the child map's key, or
8
+ //If their type don't match, or
9
+ //If they are not both maps,
10
+ @if (not map.has-key($result, $key)) or (meta.type-of(map.get($result, $key)) != meta.type-of($value)) or (not (meta.type-of(map.get($result, $key)) == map and meta.type-of($value) == map)) {
11
+ //Simply add that key to the parent map.
12
+ $result: map.merge($result, ($key: $value));
13
+ }
14
+ @else {
15
+ //If they are both maps, we need another non-destructive merger.
16
+ //Recursive, yay!
17
+ $result: map.merge($result, ($key: cx-deep-map-merge(map.get($result, $key), $value)));
18
+ }
19
+ }
20
+ @return $result;
21
+ }
@@ -0,0 +1,3 @@
1
+ @function cx-divide($a, $b) {
2
+ @return $a / $b;
3
+ }
@@ -0,0 +1,48 @@
1
+ @use "sass:map";
2
+ @import "call-once";
3
+ @import "colors";
4
+
5
+ $cx-include-all: true !default;
6
+
7
+ $cx-excluded: () !default;
8
+ $cx-used: null !default;
9
+
10
+ $cx-dependencies: () !default;
11
+
12
+ @function cx-should-include($name, $once: true) {
13
+ @return (
14
+ (map.get($cx-excluded, $name) != true) and
15
+ ($cx-include-all or
16
+ ($cx-used != null and map.get($cx-used, $name) == true))
17
+ )
18
+ and ($once != true or cx-call-once($name));
19
+ }
20
+
21
+ @function cx-included($name) {
22
+ @return cx-called-once($name);
23
+ }
24
+
25
+ @function cx-widget($name) {
26
+ @if (map.get($cx-excluded, $name)) {
27
+ @return 0;
28
+ }
29
+ $cx-used: map.merge($cx-used, ($name: true)) !global;
30
+ $dummy: 1;
31
+ $deps: map.get($cx-dependencies, $name);
32
+ @if ($deps == null) {
33
+ @return 0;
34
+ }
35
+ @each $dep in $deps {
36
+ $dummy: cx-widget($dep);
37
+ }
38
+ @return $dummy;
39
+ }
40
+
41
+ @mixin cx-widgets($names...) {
42
+ $dummy: 1;
43
+ $cx-used: () !default !global;
44
+
45
+ @each $name in $names {
46
+ $dummy: cx-widget($name)
47
+ }
48
+ }
@@ -0,0 +1,9 @@
1
+ @import "add-rules";
2
+ @import "calc";
3
+ @import "call-once";
4
+ @import "clockwise";
5
+ @import "colors";
6
+ @import "deep-merge";
7
+ @import "deep-get";
8
+ @import "include";
9
+ @import "divide";