@surflane/ui 0.5.0 → 0.7.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 (175) hide show
  1. package/README.md +1 -1
  2. package/dist/app-shell.d.ts +44 -3
  3. package/dist/app-shell.js +81 -8
  4. package/dist/bottom-navigation.d.ts +66 -0
  5. package/dist/bottom-navigation.js +36 -0
  6. package/dist/chart.d.ts +16 -0
  7. package/dist/chart.js +103 -48
  8. package/dist/css/accordion.css +11 -0
  9. package/dist/css/alert-dialog.css +11 -0
  10. package/{src → dist/css}/all.css +1 -1
  11. package/dist/css/app-shell.css +12 -0
  12. package/dist/css/autocomplete.css +15 -0
  13. package/dist/css/avatar.css +10 -0
  14. package/dist/css/badge.css +10 -0
  15. package/dist/css/bottom-navigation.css +8 -0
  16. package/dist/css/breadcrumbs.css +12 -0
  17. package/dist/css/button.css +8 -0
  18. package/dist/css/card.css +11 -0
  19. package/dist/css/chart.css +13 -0
  20. package/dist/css/checkbox-group.css +9 -0
  21. package/dist/css/checkbox.css +9 -0
  22. package/dist/css/choice-label.css +9 -0
  23. package/dist/css/code.css +13 -0
  24. package/dist/css/collapsible.css +11 -0
  25. package/dist/css/combobox.css +14 -0
  26. package/dist/css/context-menu.css +15 -0
  27. package/dist/css/date-picker.css +12 -0
  28. package/dist/css/dialog.css +10 -0
  29. package/dist/css/drawer.css +11 -0
  30. package/dist/css/empty-state.css +9 -0
  31. package/dist/css/field.css +10 -0
  32. package/dist/css/fieldset.css +8 -0
  33. package/dist/css/file-upload.css +17 -0
  34. package/dist/css/filter-bar.css +8 -0
  35. package/dist/css/form.css +8 -0
  36. package/dist/css/icon.css +8 -0
  37. package/dist/css/inline-message.css +10 -0
  38. package/dist/css/input.css +9 -0
  39. package/dist/css/layout.css +9 -0
  40. package/dist/css/link.css +9 -0
  41. package/dist/css/list.css +9 -0
  42. package/dist/css/markdown.css +18 -0
  43. package/dist/css/menu.css +14 -0
  44. package/dist/css/menubar.css +9 -0
  45. package/dist/css/meter.css +9 -0
  46. package/dist/css/native-select.css +13 -0
  47. package/dist/css/navigation-menu.css +11 -0
  48. package/dist/css/number-field.css +11 -0
  49. package/dist/css/otp-field.css +10 -0
  50. package/dist/css/page-header.css +11 -0
  51. package/dist/css/pagination.css +11 -0
  52. package/dist/css/popover.css +9 -0
  53. package/dist/css/preview-card.css +11 -0
  54. package/dist/css/progress.css +9 -0
  55. package/dist/css/radio-group.css +9 -0
  56. package/dist/css/rules/accordion.css +21 -0
  57. package/dist/css/rules/alert-dialog.css +23 -0
  58. package/dist/css/rules/app-shell.css +227 -0
  59. package/dist/css/rules/autocomplete.css +3 -0
  60. package/dist/css/rules/avatar.css +17 -0
  61. package/dist/css/rules/badge.css +17 -0
  62. package/dist/css/rules/bar.css +38 -0
  63. package/dist/css/rules/base.css +46 -0
  64. package/dist/css/rules/bottom-navigation.css +142 -0
  65. package/dist/css/rules/breadcrumbs.css +9 -0
  66. package/dist/css/rules/button.css +131 -0
  67. package/dist/css/rules/card.css +10 -0
  68. package/dist/css/rules/chart.css +264 -0
  69. package/dist/css/rules/checkbox-group.css +3 -0
  70. package/dist/css/rules/checkbox.css +25 -0
  71. package/dist/css/rules/choice-label.css +52 -0
  72. package/dist/css/rules/choice.css +104 -0
  73. package/dist/css/rules/code.css +9 -0
  74. package/dist/css/rules/collapsible.css +12 -0
  75. package/dist/css/rules/combobox.css +177 -0
  76. package/dist/css/rules/context-menu.css +9 -0
  77. package/dist/css/rules/date-picker.css +301 -0
  78. package/dist/css/rules/dialog.css +160 -0
  79. package/dist/css/rules/disclosure.css +107 -0
  80. package/dist/css/rules/drawer.css +18 -0
  81. package/dist/css/rules/empty-state.css +9 -0
  82. package/dist/css/rules/field-control.css +70 -0
  83. package/dist/css/rules/field.css +56 -0
  84. package/dist/css/rules/fieldset.css +23 -0
  85. package/dist/css/rules/file-upload.css +156 -0
  86. package/dist/css/rules/filter-bar.css +56 -0
  87. package/dist/css/rules/form.css +15 -0
  88. package/dist/css/rules/gauge.css +61 -0
  89. package/dist/css/rules/icon.css +27 -0
  90. package/dist/css/rules/inline-message.css +10 -0
  91. package/dist/css/rules/input-group.css +69 -0
  92. package/dist/css/rules/input.css +33 -0
  93. package/dist/css/rules/item.css +14 -0
  94. package/dist/css/rules/layout.css +3 -0
  95. package/dist/css/rules/link.css +9 -0
  96. package/dist/css/rules/list.css +10 -0
  97. package/dist/css/rules/markdown.css +63 -0
  98. package/dist/css/rules/menu.css +97 -0
  99. package/dist/css/rules/menubar.css +18 -0
  100. package/dist/css/rules/meter.css +3 -0
  101. package/dist/css/rules/native-select.css +3 -0
  102. package/dist/css/rules/navigation-menu.css +159 -0
  103. package/dist/css/rules/number-field.css +55 -0
  104. package/dist/css/rules/otp-field.css +68 -0
  105. package/dist/css/rules/page-header.css +3 -0
  106. package/dist/css/rules/pagination.css +3 -0
  107. package/dist/css/rules/panel.css +221 -0
  108. package/dist/css/rules/popover.css +41 -0
  109. package/dist/css/rules/popup.css +27 -0
  110. package/dist/css/rules/preview-card.css +60 -0
  111. package/dist/css/rules/progress.css +14 -0
  112. package/dist/css/rules/radio-group.css +26 -0
  113. package/dist/css/rules/scroll-area.css +101 -0
  114. package/dist/css/rules/select.css +88 -0
  115. package/dist/css/rules/separator.css +3 -0
  116. package/dist/css/rules/sheet.css +3 -0
  117. package/dist/css/rules/sizing.css +140 -0
  118. package/dist/css/rules/skeleton.css +41 -0
  119. package/dist/css/rules/slider.css +123 -0
  120. package/dist/css/rules/sparkline.css +52 -0
  121. package/dist/css/rules/spinner.css +38 -0
  122. package/dist/css/rules/stat.css +59 -0
  123. package/dist/css/rules/switch.css +50 -0
  124. package/dist/css/rules/syntax-highlighter.css +82 -0
  125. package/dist/css/rules/table.css +28 -0
  126. package/dist/css/rules/tabs.css +126 -0
  127. package/dist/css/rules/textarea.css +21 -0
  128. package/dist/css/rules/toast.css +247 -0
  129. package/dist/css/rules/toggle-group.css +3 -0
  130. package/dist/css/rules/toggle.css +27 -0
  131. package/dist/css/rules/toolbar.css +62 -0
  132. package/dist/css/rules/tooltip.css +38 -0
  133. package/dist/css/rules/tree.css +98 -0
  134. package/dist/css/rules/typography.css +3 -0
  135. package/dist/css/scroll-area.css +8 -0
  136. package/dist/css/select.css +12 -0
  137. package/dist/css/separator.css +9 -0
  138. package/dist/css/sheet.css +11 -0
  139. package/dist/css/sizing.css +7 -0
  140. package/dist/css/skeleton.css +8 -0
  141. package/dist/css/slider.css +8 -0
  142. package/dist/css/sparkline.css +8 -0
  143. package/dist/css/spinner.css +8 -0
  144. package/dist/css/stat.css +9 -0
  145. package/dist/css/styles.css +100 -0
  146. package/dist/css/switch.css +9 -0
  147. package/dist/css/syntax-highlighter.css +9 -0
  148. package/dist/css/table.css +12 -0
  149. package/dist/css/tabs.css +8 -0
  150. package/dist/css/textarea.css +10 -0
  151. package/dist/css/toast.css +11 -0
  152. package/dist/css/toggle-group.css +9 -0
  153. package/dist/css/toggle.css +10 -0
  154. package/dist/css/toolbar.css +12 -0
  155. package/dist/css/tooltip.css +9 -0
  156. package/dist/css/tree.css +10 -0
  157. package/dist/css/typography.css +9 -0
  158. package/dist/format.d.ts +25 -0
  159. package/dist/format.js +42 -0
  160. package/dist/icon.d.ts +1 -0
  161. package/dist/icon.js +1 -0
  162. package/dist/index.d.ts +7 -3
  163. package/dist/index.js +6 -2
  164. package/dist/sparkline.d.ts +41 -0
  165. package/dist/sparkline.js +50 -0
  166. package/dist/stat.d.ts +59 -0
  167. package/dist/stat.js +26 -0
  168. package/dist/status.d.ts +1 -1
  169. package/dist/status.js +1 -0
  170. package/dist/toast.d.ts +57 -1
  171. package/dist/toast.js +73 -2
  172. package/dist/tooltip.d.ts +9 -3
  173. package/dist/tooltip.js +4 -4
  174. package/package.json +90 -7
  175. package/src/styles.css +0 -3948
@@ -0,0 +1,62 @@
1
+ /* Toolbar, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+
5
+ @layer surflane.components {
6
+ .pui-toolbar-button[aria-pressed='true'] {
7
+ background: var(--selected);
8
+ border-color: var(--control-border);
9
+ color: var(--ink);
10
+ }
11
+ .pui-toolbar-button[data-disabled],
12
+ .pui-toolbar-input[data-disabled] {
13
+ opacity: var(--control-disabled-opacity);
14
+ cursor: not-allowed;
15
+ }
16
+ .pui-toolbar {
17
+ padding: var(--space-1);
18
+ border-radius: var(--radius-md);
19
+ background: var(--surface);
20
+ gap: var(--space-2);
21
+ }
22
+ .pui-toolbar-group {
23
+ display: flex;
24
+ flex-wrap: wrap;
25
+ align-items: center;
26
+ gap: var(--space-1);
27
+ min-width: 0;
28
+ }
29
+ .pui-toolbar-button,
30
+ .pui-toolbar-link {
31
+ background: transparent;
32
+ border: 0;
33
+ border-radius: max(0px, calc(var(--radius-md) - var(--space-1)));
34
+ text-decoration: none;
35
+ }
36
+ .pui-toolbar-input {
37
+ width: 160px;
38
+ max-width: 100%;
39
+ border: 0;
40
+ border-radius: max(0px, calc(var(--radius-md) - var(--space-1)));
41
+ background: var(--canvas);
42
+ }
43
+ .pui-toolbar-separator {
44
+ flex: none;
45
+ background: transparent;
46
+ }
47
+ .pui-toolbar-separator[data-orientation='vertical'] {
48
+ width: 1px;
49
+ height: 24px;
50
+ margin-inline: var(--space-1);
51
+ }
52
+ .pui-toolbar-separator[data-orientation='horizontal'] {
53
+ height: 1px;
54
+ width: 100%;
55
+ margin-block: var(--space-1);
56
+ }
57
+ .pui-toolbar[data-orientation='vertical'] .pui-toolbar-group {
58
+ flex-direction: column;
59
+ align-items: stretch;
60
+ width: 100%;
61
+ }
62
+ }
@@ -0,0 +1,38 @@
1
+ /* Tooltip, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+
5
+ @layer surflane.components {
6
+ .pui-tooltip-positioner {
7
+ z-index: var(--layer-tooltip);
8
+ }
9
+ .pui-tooltip {
10
+ border: 0;
11
+ background: var(--tooltip-background);
12
+ color: var(--tooltip-foreground);
13
+ padding: var(--space-2) var(--space-3);
14
+ max-width: 256px;
15
+ font-size: var(--type-caption-size);
16
+ letter-spacing: var(--type-caption-tracking);
17
+ line-height: var(--type-caption-leading);
18
+ }
19
+ /* The shortcut follows the label in the same face, a step quieter. */
20
+ .pui-tooltip-shortcut {
21
+ margin-inline-start: var(--space-2);
22
+ font: inherit;
23
+ font-variant-numeric: tabular-nums;
24
+ opacity: 0.72;
25
+ }
26
+ @media (forced-colors: active) {
27
+ .pui-tooltip {
28
+ background: CanvasText;
29
+ color: Canvas;
30
+ forced-color-adjust: none;
31
+ }
32
+ }
33
+ }
34
+ @layer surflane.sizes {
35
+ :where([data-ui-size], [data-ui-size] *).pui-tooltip {
36
+ padding: var(--ui-tooltip-padding-y) var(--ui-tooltip-padding-x);
37
+ }
38
+ }
@@ -0,0 +1,98 @@
1
+ /* Tree view, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+
5
+ @layer surflane.components {
6
+ .pui-tree-scroll {
7
+ min-inline-size: 0;
8
+ }
9
+ .pui-tree-viewport {
10
+ block-size: 100%;
11
+ }
12
+ .pui-tree {
13
+ position: relative;
14
+ min-inline-size: 0;
15
+ }
16
+ .pui-tree-item {
17
+ display: flex;
18
+ align-items: center;
19
+ gap: var(--space-1);
20
+ padding-inline-end: var(--space-2);
21
+ border-radius: var(--radius-md);
22
+ color: var(--ink);
23
+ cursor: default;
24
+ outline-offset: var(--focus-ring-inset);
25
+ transition: background-color var(--duration-fast) var(--ease-out);
26
+ }
27
+ .pui-tree-item:hover {
28
+ background: var(--interaction-hover-bg);
29
+ }
30
+ .pui-tree-item[aria-selected='true'] {
31
+ background: var(--selected);
32
+ }
33
+ .pui-tree-item:focus-visible {
34
+ outline: var(--focus-ring-width) solid var(--interaction-focus);
35
+ }
36
+ .pui-tree-item[aria-disabled='true'] {
37
+ color: var(--ink-muted);
38
+ }
39
+ .pui-tree-toggle,
40
+ .pui-tree-leaf {
41
+ inline-size: 32px;
42
+ block-size: 32px;
43
+ flex: 0 0 32px;
44
+ }
45
+ .pui-tree-toggle {
46
+ display: grid;
47
+ place-items: center;
48
+ padding: 0;
49
+ border: 0;
50
+ border-radius: var(--radius-full);
51
+ background: transparent;
52
+ color: inherit;
53
+ }
54
+ .pui-tree-toggle:hover:not(:disabled) {
55
+ background: var(--interaction-hover-bg);
56
+ }
57
+ .pui-tree-toggle:active:not(:disabled) {
58
+ background: var(--interaction-active-bg);
59
+ }
60
+ .pui-tree-toggle svg[data-expanded] {
61
+ rotate: 90deg;
62
+ }
63
+ .pui-tree:dir(rtl) .pui-tree-toggle svg[data-expanded] {
64
+ rotate: -90deg;
65
+ }
66
+ .pui-tree-label {
67
+ min-inline-size: 0;
68
+ overflow: hidden;
69
+ text-overflow: ellipsis;
70
+ white-space: nowrap;
71
+ }
72
+ .pui-tree-empty {
73
+ padding: var(--space-4);
74
+ color: var(--ink-muted);
75
+ }
76
+ @media (prefers-reduced-motion: reduce) {
77
+ .pui-tree-item {
78
+ transition: none;
79
+ }
80
+ }
81
+ @media (forced-colors: active) {
82
+ .pui-tree-item[aria-selected='true'] {
83
+ background: Highlight;
84
+ color: HighlightText;
85
+ }
86
+ .pui-tree-item[aria-disabled='true'] {
87
+ color: GrayText;
88
+ }
89
+ .pui-tree-item:focus-visible {
90
+ outline-color: Highlight;
91
+ }
92
+ }
93
+ }
94
+ @layer surflane.sizes {
95
+ :where([data-ui-size], [data-ui-size] *).pui-tree-item {
96
+ font-size: var(--ui-font);
97
+ }
98
+ }
@@ -0,0 +1,3 @@
1
+ /* Heading, Text and Prose, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
@@ -0,0 +1,8 @@
1
+ /* Scroll Area, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/scroll-area.css';
@@ -0,0 +1,12 @@
1
+ /* Select, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/field-control.css';
8
+ @import './rules/sizing.css';
9
+ @import './rules/popup.css';
10
+ @import './rules/item.css';
11
+ @import './rules/icon.css';
12
+ @import './rules/select.css';
@@ -0,0 +1,9 @@
1
+ /* Separator, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import '@surflane/design-tokens/presentation/separator.css';
9
+ @import './rules/separator.css';
@@ -0,0 +1,11 @@
1
+ /* Sheet, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/icon.css';
9
+ @import '@surflane/design-tokens/controls.css';
10
+ @import './rules/panel.css';
11
+ @import './rules/sheet.css';
@@ -0,0 +1,7 @@
1
+ /* SizeProvider and the size scheme, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
@@ -0,0 +1,8 @@
1
+ /* Skeleton, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/skeleton.css';
@@ -0,0 +1,8 @@
1
+ /* Slider, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/slider.css';
@@ -0,0 +1,8 @@
1
+ /* Sparkline, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/sparkline.css';
@@ -0,0 +1,8 @@
1
+ /* Spinner, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/spinner.css';
@@ -0,0 +1,9 @@
1
+ /* Stat, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/icon.css';
9
+ @import './rules/stat.css';
@@ -0,0 +1,100 @@
1
+ /* Every component stylesheet, once each, in cascade order. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/field-control.css';
8
+ @import './rules/sizing.css';
9
+ @import './rules/input.css';
10
+ @import './rules/popup.css';
11
+ @import './rules/item.css';
12
+ @import './rules/icon.css';
13
+ @import './rules/select.css';
14
+ @import './rules/tooltip.css';
15
+ @import './rules/popover.css';
16
+ @import './rules/button.css';
17
+ @import './rules/menu.css';
18
+ @import './rules/scroll-area.css';
19
+ @import '@surflane/design-tokens/controls.css';
20
+ @import './rules/dialog.css';
21
+ @import './rules/panel.css';
22
+ @import './rules/drawer.css';
23
+ @import './rules/alert-dialog.css';
24
+ @import './rules/form.css';
25
+ @import './rules/field.css';
26
+ @import './rules/fieldset.css';
27
+ @import './rules/choice.css';
28
+ @import './rules/textarea.css';
29
+ @import '@surflane/design-tokens/presentation/table.css';
30
+ @import './rules/table.css';
31
+ @import './rules/checkbox.css';
32
+ @import './rules/radio-group.css';
33
+ @import './rules/switch.css';
34
+ @import './rules/choice-label.css';
35
+ @import './rules/tabs.css';
36
+ @import './rules/disclosure.css';
37
+ @import './rules/accordion.css';
38
+ @import './rules/collapsible.css';
39
+ @import './rules/gauge.css';
40
+ @import './rules/progress.css';
41
+ @import './rules/spinner.css';
42
+ @import './rules/skeleton.css';
43
+ @import './rules/input-group.css';
44
+ @import './rules/combobox.css';
45
+ @import './rules/number-field.css';
46
+ @import './rules/slider.css';
47
+ @import './rules/bar.css';
48
+ @import './rules/toggle.css';
49
+ @import './rules/toolbar.css';
50
+ @import './rules/menubar.css';
51
+ @import './rules/context-menu.css';
52
+ @import '@surflane/design-tokens/presentation/link.css';
53
+ @import './rules/link.css';
54
+ @import './rules/preview-card.css';
55
+ @import './rules/navigation-menu.css';
56
+ @import './rules/otp-field.css';
57
+ @import './rules/toast.css';
58
+ @import '@surflane/design-tokens/presentation/badge.css';
59
+ @import './rules/badge.css';
60
+ @import './rules/file-upload.css';
61
+ @import './rules/filter-bar.css';
62
+ @import './rules/app-shell.css';
63
+ @import './rules/tree.css';
64
+ @import './rules/date-picker.css';
65
+ @import './rules/chart.css';
66
+ @import '@surflane/design-tokens/foundations/layout.css';
67
+ @import './rules/layout.css';
68
+ @import '@surflane/design-tokens/presentation/card.css';
69
+ @import './rules/card.css';
70
+ @import '@surflane/design-tokens/presentation/avatar.css';
71
+ @import './rules/avatar.css';
72
+ @import '@surflane/design-tokens/presentation/list.css';
73
+ @import './rules/list.css';
74
+ @import './rules/stat.css';
75
+ @import './rules/sparkline.css';
76
+ @import '@surflane/design-tokens/presentation/inline-message.css';
77
+ @import './rules/inline-message.css';
78
+ @import './rules/syntax-highlighter.css';
79
+ @import '@surflane/design-tokens/presentation/code.css';
80
+ @import './rules/code.css';
81
+ @import '@surflane/design-tokens/presentation/empty-state.css';
82
+ @import './rules/empty-state.css';
83
+ @import '@surflane/design-tokens/presentation/breadcrumbs.css';
84
+ @import './rules/breadcrumbs.css';
85
+ @import '@surflane/design-tokens/foundations/typography.css';
86
+ @import './rules/typography.css';
87
+ @import './rules/markdown.css';
88
+ @import '@surflane/design-tokens/presentation/separator.css';
89
+ @import './rules/separator.css';
90
+ @import '@surflane/design-tokens/presentation/pagination.css';
91
+ @import './rules/pagination.css';
92
+ @import './rules/bottom-navigation.css';
93
+ @import '@surflane/design-tokens/foundations/page-header.css';
94
+ @import './rules/page-header.css';
95
+ @import './rules/native-select.css';
96
+ @import './rules/autocomplete.css';
97
+ @import './rules/checkbox-group.css';
98
+ @import './rules/toggle-group.css';
99
+ @import './rules/sheet.css';
100
+ @import './rules/meter.css';
@@ -0,0 +1,9 @@
1
+ /* Switch, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/choice.css';
9
+ @import './rules/switch.css';
@@ -0,0 +1,9 @@
1
+ /* Syntax highlighter, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/scroll-area.css';
9
+ @import './rules/syntax-highlighter.css';
@@ -0,0 +1,12 @@
1
+ /* Table, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/icon.css';
9
+ @import './rules/button.css';
10
+ @import './rules/scroll-area.css';
11
+ @import '@surflane/design-tokens/presentation/table.css';
12
+ @import './rules/table.css';
@@ -0,0 +1,8 @@
1
+ /* Tabs, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/tabs.css';
@@ -0,0 +1,10 @@
1
+ /* Textarea, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/field-control.css';
8
+ @import './rules/sizing.css';
9
+ @import './rules/input.css';
10
+ @import './rules/textarea.css';
@@ -0,0 +1,11 @@
1
+ /* Toast, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/popup.css';
9
+ @import './rules/icon.css';
10
+ @import './rules/button.css';
11
+ @import './rules/toast.css';
@@ -0,0 +1,9 @@
1
+ /* Toggle Group, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/bar.css';
9
+ @import './rules/toggle-group.css';
@@ -0,0 +1,10 @@
1
+ /* Toggle, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/button.css';
9
+ @import './rules/bar.css';
10
+ @import './rules/toggle.css';
@@ -0,0 +1,12 @@
1
+ /* Toolbar, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/field-control.css';
8
+ @import './rules/sizing.css';
9
+ @import './rules/input.css';
10
+ @import './rules/button.css';
11
+ @import './rules/bar.css';
12
+ @import './rules/toolbar.css';
@@ -0,0 +1,9 @@
1
+ /* Tooltip, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/popup.css';
9
+ @import './rules/tooltip.css';
@@ -0,0 +1,10 @@
1
+ /* Tree view, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import './rules/icon.css';
9
+ @import './rules/scroll-area.css';
10
+ @import './rules/tree.css';
@@ -0,0 +1,9 @@
1
+ /* Heading, Text and Prose, with the styles of what it renders. */
2
+ @layer surflane.tokens, surflane.themes, surflane.base, surflane.components,
3
+ surflane.sizes;
4
+ @import '@surflane/design-tokens/tokens.css';
5
+ @import '@surflane/design-tokens/presentation/base.css';
6
+ @import './rules/base.css';
7
+ @import './rules/sizing.css';
8
+ @import '@surflane/design-tokens/foundations/typography.css';
9
+ @import './rules/typography.css';
@@ -0,0 +1,25 @@
1
+ /** Number formatting shared by every screen: one place decides the locale, the sign and
2
+ * the precision of values, money, percentages and compact figures. Pass `locale` when
3
+ * rendering on the server, so the client formats the same text. */
4
+ export type NumberFormatOptions = {
5
+ /** A BCP 47 locale such as 'ko-KR'. Defaults to the runtime's. */
6
+ locale?: string | string[];
7
+ /** Digits after the decimal point: an exact count, or a [minimum, maximum] range. */
8
+ precision?: number | readonly [number, number];
9
+ /** Shows + before gains and − before losses. Zero stays unsigned. */
10
+ signed?: boolean;
11
+ /** Shortens large values: 1.2K and 3.4M, or 1.2만 in Korean. */
12
+ compact?: boolean;
13
+ /** Text for a missing value: null, undefined or a non-finite number. */
14
+ missing?: string;
15
+ };
16
+ /** The default text for a missing value. Zero is a value; missing is not. */
17
+ export declare const missingValue = "\u2014";
18
+ /** A plain number: 1,234.5. */
19
+ export declare function formatNumber(value: number | null | undefined, options?: NumberFormatOptions): string;
20
+ /** An amount of money in an ISO 4217 currency: ₩1,200 or $12.50. The currency sets the
21
+ * default precision. */
22
+ export declare function formatCurrency(value: number | null | undefined, currency: string, options?: NumberFormatOptions): string;
23
+ /** A ratio as a percentage: 0.032 is 3.2%. Up to one decimal place unless `precision`
24
+ * says otherwise. */
25
+ export declare function formatPercent(value: number | null | undefined, options?: NumberFormatOptions): string;
package/dist/format.js ADDED
@@ -0,0 +1,42 @@
1
+ /** The default text for a missing value. Zero is a value; missing is not. */
2
+ export const missingValue = '—';
3
+ const cache = new Map();
4
+ function formatter(locale, options) {
5
+ const key = JSON.stringify([locale ?? null, options]);
6
+ let format = cache.get(key);
7
+ if (!format) {
8
+ format = new Intl.NumberFormat(locale, options);
9
+ cache.set(key, format);
10
+ }
11
+ return format;
12
+ }
13
+ function digits(precision) {
14
+ if (precision === undefined)
15
+ return {};
16
+ const [minimumFractionDigits, maximumFractionDigits] = typeof precision === 'number' ? [precision, precision] : precision;
17
+ return { minimumFractionDigits, maximumFractionDigits };
18
+ }
19
+ function format(value, base, { locale, precision, signed, compact, missing = missingValue, }) {
20
+ if (typeof value !== 'number' || !Number.isFinite(value))
21
+ return missing;
22
+ return formatter(locale, {
23
+ ...base,
24
+ ...(compact ? { notation: 'compact' } : {}),
25
+ ...(signed ? { signDisplay: 'exceptZero' } : {}),
26
+ ...digits(precision),
27
+ }).format(value);
28
+ }
29
+ /** A plain number: 1,234.5. */
30
+ export function formatNumber(value, options = {}) {
31
+ return format(value, {}, options);
32
+ }
33
+ /** An amount of money in an ISO 4217 currency: ₩1,200 or $12.50. The currency sets the
34
+ * default precision. */
35
+ export function formatCurrency(value, currency, options = {}) {
36
+ return format(value, { style: 'currency', currency }, options);
37
+ }
38
+ /** A ratio as a percentage: 0.032 is 3.2%. Up to one decimal place unless `precision`
39
+ * says otherwise. */
40
+ export function formatPercent(value, options = {}) {
41
+ return format(value, { style: 'percent' }, { precision: [0, 1], ...options });
42
+ }
package/dist/icon.d.ts CHANGED
@@ -8,6 +8,7 @@ declare const shapes: {
8
8
  alert: React.JSX.Element;
9
9
  warning: React.JSX.Element;
10
10
  menu: React.JSX.Element;
11
+ sidebar: React.JSX.Element;
11
12
  more: React.JSX.Element;
12
13
  sun: React.JSX.Element;
13
14
  moon: React.JSX.Element;
package/dist/icon.js CHANGED
@@ -11,6 +11,7 @@ const shapes = {
11
11
  alert: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: '12', cy: '12', r: '9' }), _jsx("path", { d: 'M12 7v6m0 3v1' })] })),
12
12
  warning: (_jsxs(_Fragment, { children: [_jsx("path", { d: 'm12 3 10 18H2L12 3Z' }), _jsx("path", { d: 'M12 9v4m0 3v1' })] })),
13
13
  menu: _jsx("path", { d: 'M4 6h16M4 12h16M4 18h16' }),
14
+ sidebar: (_jsxs(_Fragment, { children: [_jsx("rect", { x: '3', y: '4', width: '18', height: '16', rx: '2' }), _jsx("path", { d: 'M9 4v16' })] })),
14
15
  more: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: '5', cy: '12', r: '1' }), _jsx("circle", { cx: '12', cy: '12', r: '1' }), _jsx("circle", { cx: '19', cy: '12', r: '1' })] })),
15
16
  sun: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: '12', cy: '12', r: '4' }), _jsx("path", { d: 'M12 2v2m0 16v2M2 12h2m16 0h2M5 5l1.5 1.5m11 11L19 19M5 19l1.5-1.5m11-11L19 5' })] })),
16
17
  moon: _jsx("path", { d: 'M20.5 13.2A8.5 8.5 0 0 1 10.8 3.5 8.5 8.5 0 1 0 20.5 13.2Z' }),