@soxa-ui/theme-base 0.0.0-stage → 0.3.0-beta.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.
- package/LICENSE +21 -0
- package/README.md +399 -2
- package/dist/setup/index.d.ts +31 -0
- package/dist/setup/index.js +4 -0
- package/dist/setup/plugins/index.d.ts +3 -0
- package/dist/setup/plugins/table-head.plugin.d.ts +44 -0
- package/dist/setup/plugins/table-head.plugin.js +86 -0
- package/dist/setup/plugins/tabs-view.plugin.d.ts +32 -0
- package/dist/setup/plugins/tabs-view.plugin.js +100 -0
- package/dist/setup/plugins/toasts-front.plugin.d.ts +63 -0
- package/dist/setup/plugins/toasts-front.plugin.js +131 -0
- package/dist/setup/plugins/transitions.d.ts +43 -0
- package/dist/setup/plugins/transitions.js +75 -0
- package/package.json +55 -4
- package/src/anchored.css +75 -0
- package/src/caption.css +71 -0
- package/src/components/accordion.css +96 -0
- package/src/components/button.css +139 -0
- package/src/components/calendar.css +594 -0
- package/src/components/check-box.css +121 -0
- package/src/components/date-input.css +224 -0
- package/src/components/date-picker.css +208 -0
- package/src/components/dialog.css +95 -0
- package/src/components/drag-and-drop.css +18 -0
- package/src/components/drawer.css +171 -0
- package/src/components/field.css +440 -0
- package/src/components/icon.css +61 -0
- package/src/components/input.css +189 -0
- package/src/components/label.css +160 -0
- package/src/components/list-box.css +165 -0
- package/src/components/menu.css +224 -0
- package/src/components/number-input.css +183 -0
- package/src/components/pagination.css +164 -0
- package/src/components/popover.css +164 -0
- package/src/components/progress-linear.css +88 -0
- package/src/components/progress-spinner.css +127 -0
- package/src/components/radio-group.css +130 -0
- package/src/components/rating.css +141 -0
- package/src/components/scroller.css +136 -0
- package/src/components/select.css +233 -0
- package/src/components/skeleton.css +33 -0
- package/src/components/slider.css +482 -0
- package/src/components/switch.css +142 -0
- package/src/components/table.css +1513 -0
- package/src/components/tabs.css +166 -0
- package/src/components/tags.css +371 -0
- package/src/components/textarea.css +179 -0
- package/src/components/toasts.css +447 -0
- package/src/components/tooltip.css +59 -0
- package/src/direction.css +30 -0
- package/src/disabled.css +26 -0
- package/src/group.css +90 -0
- package/src/index.css +97 -0
- package/src/modal.css +183 -0
- package/src/place.css +30 -0
- package/src/required.css +40 -0
- package/src/reset.css +172 -0
- package/src/swipe.css +71 -0
- package/src/target.css +46 -0
- package/theme-contract.json +3373 -0
- package/theme-variables.json +336 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/* ─── Accordion ───────────────────────────────────────────────
|
|
2
|
+
* Секции в столбец: у каждой — строка заголовка (Button) и панель под ней.
|
|
3
|
+
*
|
|
4
|
+
* .so-accordion корень — столбец секций
|
|
5
|
+
* .so-accordion-item секция
|
|
6
|
+
* .so-accordion-item__header заголовок — Button
|
|
7
|
+
* .so-accordion-item__arrow обёртка стрелки в слоте у края
|
|
8
|
+
* .so-accordion-item__body место панели
|
|
9
|
+
* .so-accordion-item__content панель — содержимое секции
|
|
10
|
+
*
|
|
11
|
+
* Раскрытая секция — `data-selected` её корня (пишет расширение выбора).
|
|
12
|
+
* Закрытая панель схлопнута строкой сетки места (`0fr`) — содержимое на
|
|
13
|
+
* месте, в дереве, а высоты у него нет; раскрытая встаёт во всю высоту
|
|
14
|
+
* содержимого (`1fr`). Схлопывается строка сетки, а не высота: высоту
|
|
15
|
+
* содержимого знать не нужно, и тема может вести раскрытие переходом строки.
|
|
16
|
+
*
|
|
17
|
+
* Зазоры — переменные корня документа: между секциями, поле заголовка и поле
|
|
18
|
+
* раскрытой панели по оси блока. Умолчания — числа темы oren; тема задаёт
|
|
19
|
+
* свои на корне документа.
|
|
20
|
+
*
|
|
21
|
+
* Облик — вид заголовка, поворот стрелки раскрытой секции и раскрытие
|
|
22
|
+
* переходом (движение) — рисует тема. */
|
|
23
|
+
|
|
24
|
+
:root {
|
|
25
|
+
--so-accordion-gap: 0.25rem;
|
|
26
|
+
--so-accordion-header-padding: 0.5rem;
|
|
27
|
+
--so-accordion-content-padding: 0.5rem;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.so-accordion {
|
|
31
|
+
display: flex;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
gap: var(--so-accordion-gap);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.so-accordion-item {
|
|
37
|
+
display: flex;
|
|
38
|
+
flex-direction: column;
|
|
39
|
+
width: 100%;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Заголовок — во всю строку секции, содержимое — по её началу, в RTL это
|
|
43
|
+
* правый край. Только своя область текста: правило по любой `.so-button` в
|
|
44
|
+
* секции доставало бы и кнопки в её содержимом. Отступы детей области —
|
|
45
|
+
* нулевой специфичности: дети — содержимое потребителя, и его собственный
|
|
46
|
+
* класс с отступом обязан их перекрыть (`button.css`). */
|
|
47
|
+
.so-accordion-item__header {
|
|
48
|
+
justify-content: flex-start;
|
|
49
|
+
width: 100%;
|
|
50
|
+
padding-block: var(--so-accordion-header-padding);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.so-accordion-item__header > .so-button__text {
|
|
54
|
+
text-align: start;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
:where(.so-accordion-item__header > .so-button__text > *) {
|
|
58
|
+
margin-inline: 0 auto;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* Стрелка — обёртка слота, а не сама иконка: подменишь иконку через
|
|
62
|
+
* `leading-icon` или `trailing-icon` — тема повернёт и её. Обёртка — коробка,
|
|
63
|
+
* а не строка: к строчной коробке поворот не применяется. */
|
|
64
|
+
.so-accordion-item__arrow {
|
|
65
|
+
display: inline-flex;
|
|
66
|
+
flex-shrink: 0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* Пустая обёртка — слот стрелки задан, но этой секции ничего не нарисовал, а
|
|
70
|
+
* стрелки по умолчанию на её стороне нет — места в ряду заголовка не
|
|
71
|
+
* занимает: иначе зазор ряда сдвинул бы текст. */
|
|
72
|
+
.so-accordion-item__arrow:empty {
|
|
73
|
+
display: none;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.so-accordion-item__body {
|
|
77
|
+
display: grid;
|
|
78
|
+
grid-template-rows: 0fr;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Раскрытие — только своей панели: правило через потомка раскрывало бы и
|
|
82
|
+
* секции Accordion, вложенного в содержимое. */
|
|
83
|
+
.so-accordion-item[data-selected='true'] > .so-accordion-item__body {
|
|
84
|
+
grid-template-rows: 1fr;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Строка `0fr` схлопывает содержимое панели, но не её поле: поле — только
|
|
88
|
+
* раскрытой, иначе у свёрнутой секции оставалась бы пустая полоса. */
|
|
89
|
+
.so-accordion-item__content {
|
|
90
|
+
overflow: hidden;
|
|
91
|
+
padding-block: 0;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.so-accordion-item[data-selected='true'] > .so-accordion-item__body > .so-accordion-item__content {
|
|
95
|
+
padding-block: var(--so-accordion-content-padding);
|
|
96
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/* ─── Button ──────────────────────────────────────────────────
|
|
2
|
+
* Строка из трёх мест: слот `leading` у начала кнопки, область текста,
|
|
3
|
+
* слот `trailing` у конца. Область текста растёт на всё место между слотами
|
|
4
|
+
* — середина целиком её, — и слоты стоят у краёв, как бы ни была широка
|
|
5
|
+
* кнопка.
|
|
6
|
+
*
|
|
7
|
+
* Шкала размеров — переменные корня документа по размеру (`sm`…`2xl`):
|
|
8
|
+
* высота, поле по строке, зазор между частями строки и кегль. Кегля у
|
|
9
|
+
* `normal` нет: кнопка берёт кегль места. Шкала — не только Button: по ней с
|
|
10
|
+
* кнопкой в одну строку встают части других компонентов (клетка Pagination,
|
|
11
|
+
* плитка дня Calendar, строка Table, кнопки шапки окна), и числа они берут
|
|
12
|
+
* отсюда, а не копируют. Умолчания — числа темы oren; тема задаёт свои на
|
|
13
|
+
* корне документа.
|
|
14
|
+
*
|
|
15
|
+
* Облик — фон, текст, рамка, скругление, кольцо фокуса и виды — рисует тема. */
|
|
16
|
+
|
|
17
|
+
:root {
|
|
18
|
+
--so-button-height-sm: 1.75rem;
|
|
19
|
+
--so-button-height-normal: 2rem;
|
|
20
|
+
--so-button-height-lg: 2.25rem;
|
|
21
|
+
--so-button-height-xl: 2.5rem;
|
|
22
|
+
--so-button-height-2xl: 2.75rem;
|
|
23
|
+
|
|
24
|
+
--so-button-padding-sm: 0.375rem;
|
|
25
|
+
--so-button-padding-normal: 0.625rem;
|
|
26
|
+
--so-button-padding-lg: 0.75rem;
|
|
27
|
+
--so-button-padding-xl: 0.875rem;
|
|
28
|
+
--so-button-padding-2xl: 1rem;
|
|
29
|
+
|
|
30
|
+
--so-button-gap-sm: 0.25rem;
|
|
31
|
+
--so-button-gap-normal: 0.375rem;
|
|
32
|
+
--so-button-gap-lg: 0.5rem;
|
|
33
|
+
--so-button-gap-xl: 0.625rem;
|
|
34
|
+
--so-button-gap-2xl: 0.75rem;
|
|
35
|
+
|
|
36
|
+
/* The font of a Button counts from the font of the place, which `normal`
|
|
37
|
+
* takes as is: `sm` is 2px smaller, `lg`, `xl` and `2xl` 2px, 4px and 8px
|
|
38
|
+
* larger — 14 / 16 / 18 / 20 / 24px at a 16px place, 12 / 14 / 16 / 18 /
|
|
39
|
+
* 22px at 14px. `em` resolves where the variable is read, against the
|
|
40
|
+
* parent, that is the place the part stands in. */
|
|
41
|
+
--so-button-font-size-sm: calc(1em - 0.125rem);
|
|
42
|
+
--so-button-line-height-sm: calc(1.25 / 0.875);
|
|
43
|
+
--so-button-font-size-lg: calc(1em + 0.125rem);
|
|
44
|
+
--so-button-line-height-lg: calc(1.75 / 1.125);
|
|
45
|
+
--so-button-font-size-xl: calc(1em + 0.25rem);
|
|
46
|
+
--so-button-line-height-xl: calc(1.75 / 1.25);
|
|
47
|
+
--so-button-font-size-2xl: calc(1em + 0.5rem);
|
|
48
|
+
--so-button-line-height-2xl: calc(2 / 1.5);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Строка по центру по обеим осям, не выше места, где стоит. `relative` —
|
|
52
|
+
* опора для того, что встаёт поверх кнопки: зона нажатия кнопки сортировки
|
|
53
|
+
* Table — псевдоэлемент кнопки в 24 px. */
|
|
54
|
+
.so-button {
|
|
55
|
+
position: relative;
|
|
56
|
+
display: flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
justify-content: center;
|
|
59
|
+
max-height: 100%;
|
|
60
|
+
cursor: pointer;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Область текста — блок, растущий на всё место между слотами. Строчное
|
|
64
|
+
* содержимое области (текст) двигает `text-align`, блочное — нет, а иконка
|
|
65
|
+
* в слоте по умолчанию — блок (корень `.so-icon`, `icon.css`; `svg`
|
|
66
|
+
* библиотеки — сброс, `reset.css`). Поэтому блочного ребёнка двигают
|
|
67
|
+
* авто-отступы; строчного они не трогают — у строчного элемента `auto`
|
|
68
|
+
* считается нулём, — и одно правило держит и текст, и иконку. Без этого в
|
|
69
|
+
* кнопке шире своей иконки крестик стоял у начала: так было у квадратной
|
|
70
|
+
* кнопки закрытия Popover.
|
|
71
|
+
*
|
|
72
|
+
* Флекса вместо блока нет намеренно: у флекс-контейнера текст — анонимный
|
|
73
|
+
* флекс-элемент, и многоточие пропало бы. Отступы детей — нулевой
|
|
74
|
+
* специфичности: дети — содержимое потребителя, и его собственный класс с
|
|
75
|
+
* отступом обязан их перекрыть. Строки списков ставят содержимое к началу
|
|
76
|
+
* строки своим правилом (тема, по контексту). */
|
|
77
|
+
.so-button__text {
|
|
78
|
+
flex-grow: 1;
|
|
79
|
+
overflow: hidden;
|
|
80
|
+
text-overflow: ellipsis;
|
|
81
|
+
white-space: nowrap;
|
|
82
|
+
text-align: center;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
:where(.so-button__text > *) {
|
|
86
|
+
margin-inline: auto;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Выключенная — `data-disabled`: ядро пишет его на любом теге. Нативный
|
|
90
|
+
* атрибут есть только у части тегов (у Button на `span` его нет никогда), и
|
|
91
|
+
* он переезжает вместе с тегом: селектор по нему молча перестал бы
|
|
92
|
+
* срабатывать. Гаснет кнопка целиком (`disabled.css`) и нажатий не ловит. */
|
|
93
|
+
.so-button[data-disabled='true'] {
|
|
94
|
+
opacity: var(--so-disabled-opacity);
|
|
95
|
+
cursor: default;
|
|
96
|
+
pointer-events: none;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.so-button[data-disabled='true'] > * {
|
|
100
|
+
--so-disabled-opacity: 1;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.so-button--size-sm {
|
|
104
|
+
height: var(--so-button-height-sm);
|
|
105
|
+
padding-inline: var(--so-button-padding-sm);
|
|
106
|
+
gap: var(--so-button-gap-sm);
|
|
107
|
+
font-size: var(--so-button-font-size-sm);
|
|
108
|
+
line-height: var(--so-button-line-height-sm);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.so-button--size-normal {
|
|
112
|
+
height: var(--so-button-height-normal);
|
|
113
|
+
padding-inline: var(--so-button-padding-normal);
|
|
114
|
+
gap: var(--so-button-gap-normal);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.so-button--size-lg {
|
|
118
|
+
height: var(--so-button-height-lg);
|
|
119
|
+
padding-inline: var(--so-button-padding-lg);
|
|
120
|
+
gap: var(--so-button-gap-lg);
|
|
121
|
+
font-size: var(--so-button-font-size-lg);
|
|
122
|
+
line-height: var(--so-button-line-height-lg);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.so-button--size-xl {
|
|
126
|
+
height: var(--so-button-height-xl);
|
|
127
|
+
padding-inline: var(--so-button-padding-xl);
|
|
128
|
+
gap: var(--so-button-gap-xl);
|
|
129
|
+
font-size: var(--so-button-font-size-xl);
|
|
130
|
+
line-height: var(--so-button-line-height-xl);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.so-button--size-2xl {
|
|
134
|
+
height: var(--so-button-height-2xl);
|
|
135
|
+
padding-inline: var(--so-button-padding-2xl);
|
|
136
|
+
gap: var(--so-button-gap-2xl);
|
|
137
|
+
font-size: var(--so-button-font-size-2xl);
|
|
138
|
+
line-height: var(--so-button-line-height-2xl);
|
|
139
|
+
}
|