@keenmate/pure-css 1.0.0 → 1.0.2
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/CHANGELOG.md +41 -1
- package/README.md +14 -12
- package/dist/css/base.css +4 -0
- package/dist/css/pure-css.css +6 -3
- package/dist/css/utilities.css +0 -1
- package/package.json +6 -6
- package/src/scss/_base-css-variables.scss +12 -1
- package/src/scss/_fonts.scss +1 -1
- package/src/scss/_sidebar.scss +14 -2
- package/src/scss/pure-css.scss +1 -1
- package/src/scss/utilities.scss +1 -1
- package/src/scss/variables/_base.scss +10 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,46 @@
|
|
|
3
3
|
All notable changes to `@keenmate/pure-css` are documented here. Format based on
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
5
5
|
|
|
6
|
+
## [1.0.2] — 2026-09-15 [PUBLISHED]
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- **A `--base-icon-refresh` token.** Lucide's two-curved-arrows (`refresh-cw`)
|
|
11
|
+
glyph — reload / re-fetch a view or dataset — added to `variables/_base.scss`
|
|
12
|
+
and emitted from `output-base-css-variables` (so both the standalone `base.css`
|
|
13
|
+
and the `pure-css.css` bundle carry it). Sits in the utility-icon row next to
|
|
14
|
+
`search` and `filter`; consumers spin it with a CSS animation while a refresh
|
|
15
|
+
is in flight.
|
|
16
|
+
- **Three `--base-icon-*` tokens: `copy`, `ellipsis`, `save`.** Mask-friendly
|
|
17
|
+
Lucide glyphs, added to `variables/_base.scss` **and** emitted from
|
|
18
|
+
`output-base-css-variables` (so both the standalone `base.css` and the
|
|
19
|
+
`pure-css.css` bundle carry them).
|
|
20
|
+
- `copy` (two overlapping sheets) — copy-to-clipboard.
|
|
21
|
+
- `ellipsis` (three dots) — the "more / overflow" affordance. The vertical
|
|
22
|
+
variant is the **same glyph rotated 90°** (rotate-one-glyph, like `chevron`),
|
|
23
|
+
so consumers don't need a separate token.
|
|
24
|
+
- `save` (floppy disk) — persist / commit.
|
|
25
|
+
|
|
26
|
+
These complete the affordance set pure-admin migrated off Font Awesome: its
|
|
27
|
+
`--pa-icon-copy` / `-ellipsis` / `-save` already routed through these
|
|
28
|
+
`--base-icon-*` names with inline fallbacks, so they now become fully
|
|
29
|
+
theme-overridable with no pure-admin change.
|
|
30
|
+
|
|
31
|
+
## [1.0.1] — 2026-09-13 [PUBLISHED]
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- **Sidebar type-and-go search text was invisible on themes with a
|
|
36
|
+
mode-independent sidebar (e.g. express light).** The framed search box
|
|
37
|
+
(`.pc-sidebar__search`) sits on the **input** surface (`--base-input-bg`), but
|
|
38
|
+
its field text and its `:hover` colour used `--pc-sidebar-text` — a token tuned
|
|
39
|
+
for the **sidebar** surface. When a theme keeps the sidebar one colour across
|
|
40
|
+
modes (express: always-black sidebar → `--pc-sidebar-text: #fff`), that white
|
|
41
|
+
text landed on the light input background and vanished (white-on-white). Both
|
|
42
|
+
now use `--base-input-color`, which is emitted per-mode alongside
|
|
43
|
+
`--base-input-bg`, so the text/background pair is always legible. Affects
|
|
44
|
+
`.pc-sidebar__search-field` and `.pc-sidebar__search:hover`.
|
|
45
|
+
|
|
6
46
|
## [1.0.0] — 2026-09-12 [PUBLISHED]
|
|
7
47
|
|
|
8
48
|
The **first stable release** — the 1.0.0-rc series culminates here. Two additive
|
|
@@ -138,7 +178,7 @@ pure-css mirrors it and a drift guard keeps the two honest.
|
|
|
138
178
|
The **shared theming knob** release. Before rc07 the same visual token (a tooltip
|
|
139
179
|
background, an input border, a dropdown surface) was produced *twice and
|
|
140
180
|
independently* — pure-admin's `--pc-*` component tokens were baked compile-time
|
|
141
|
-
literals, while the
|
|
181
|
+
literals, while the Keenmate web components read `--base-*` live — so they agreed
|
|
142
182
|
only by coincidence and diverged the instant a theme retuned `--base-*` at
|
|
143
183
|
runtime (every dual-mode theme does exactly this at `.pc-mode-dark`). rc07 makes
|
|
144
184
|
`--base-*` the single runtime knob: override one namespace and pure-admin
|
package/README.md
CHANGED
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
# @keenmate/pure-css
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Keenmate's CSS **foundation** — descended from [Yahoo's Pure CSS](https://purecss.io/) and extended into a
|
|
4
4
|
more robust, themeable layer for real apps. One small, dependency-free package gives you the
|
|
5
5
|
**`--base-*` theming contract** (one block of custom properties re-themes everything at once), a
|
|
6
6
|
modern **flexbox grid** (`.pc-row` / `.pc-col`, container-query responsive — replacing Pure's float
|
|
7
7
|
grid), a set of **utility classes**, and an optional **app shell + JS runtime** (in the
|
|
8
8
|
`pure-css.css` bundle).
|
|
9
9
|
|
|
10
|
-
It's the shared layer the whole
|
|
11
|
-
[`@keenmate/pure-admin-core`](https://github.com/
|
|
12
|
-
top of it, and every
|
|
10
|
+
It's the shared layer the whole Keenmate stack agrees on:
|
|
11
|
+
[`@keenmate/pure-admin-core`](https://github.com/Keenmate/pure-admin) builds its component library on
|
|
12
|
+
top of it, and every Keenmate web/Svelte component reads its colours from the same `--base-*`
|
|
13
13
|
variables.
|
|
14
14
|
|
|
15
|
-
## What's New in 1.0.
|
|
15
|
+
## What's New in 1.0.2
|
|
16
16
|
|
|
17
|
-
- **Icons —
|
|
17
|
+
- **Icons — `copy`, `ellipsis`, `save` and `refresh` glyphs join the shared `--base-*` contract** — four more mask-friendly Lucide glyphs so every consumer paints the same actions from one theme knob. `--base-icon-copy` (two overlapping sheets) is copy-to-clipboard, `--base-icon-ellipsis` (three dots) is the "more / overflow" mark — its vertical `⋮` variant is the *same glyph rotated 90°* (the rotate-one-glyph discipline already used for `chevron`), so there's no separate token to maintain — `--base-icon-save` (a floppy disk) is persist / commit, and `--base-icon-refresh` (two curved arrows, Lucide `refresh-cw`) is reload / re-fetch, sitting alongside `search` and `filter` in the utility-icon row (consumers typically spin it with a CSS animation while a fetch is in flight). The action trio completes the affordance set pure-admin migrated off Font Awesome: its `--pa-icon-copy` / `-ellipsis` / `-save` already routed through these `--base-icon-*` names with inline fallbacks, so they become fully theme-overridable with zero pure-admin change. All are authored in `variables/_base.scss` and emitted from `output-base-css-variables`, so both the standalone `base.css` and the `pure-css.css` bundle carry them; consume via `mask: var(--base-icon-copy); background: currentColor`.
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
## What's New in 1.0.1
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- **Namespace hygiene — the app shell no longer reaches into pure-admin's token namespace** — the KeenMate ecosystem is aligning its custom-property prefixes with its class prefixes: `--pc-*` / `.pc-*` belong to the pure-css foundation + app shell, `--pa-*` / `.pa-*` belong to pure-admin components. As part of that rename, pure-css's shell had a handful of incidental references to *component* tokens — `var(--pc-card-bg, …)` in the fit-flyout / navbar dropdown / resize-handle, `var(--pc-input-bg, …)` in the sidebar search, and `var(--pc-icon-chevron, …)` on the sidebar/navbar chevrons. Since those tokens are moving to `--pa-*` (pure-admin's namespace) and the foundation must not depend on pure-admin, each now reads its `--base-*` foundation value directly. Rendered output is byte-for-byte unchanged — every dropped tier already resolved to the same `--base-*` fallback.
|
|
21
|
+
- **Sidebar search — type-and-go text is legible again on mode-independent sidebars** — the framed sidebar search box (`.pc-sidebar__search`) sits on the *input* surface (`--base-input-bg`), but its field text and `:hover` colour were painted with `--pc-sidebar-text`, a token tuned for the *sidebar* surface. On themes that keep the sidebar one colour across light and dark (e.g. express, whose sidebar is always black → `--pc-sidebar-text: #fff`), that white text landed on the light input background and vanished — white-on-white, so you couldn't read what you were typing. Both `.pc-sidebar__search-field` and `.pc-sidebar__search:hover` now read `--base-input-color`, which is emitted per-mode alongside `--base-input-bg`, so the field text always pairs with its own surface and stays readable in every theme.
|
|
24
22
|
|
|
25
23
|
## Why
|
|
26
24
|
|
|
@@ -135,7 +133,11 @@ swap the icon set.
|
|
|
135
133
|
| `--base-icon-add` / `--base-icon-edit` / `--base-icon-delete` | `+` / pencil / trash | **CRUD action** verbs — create / modify / **destroy** (delete is a trash can, *not* an ✕, so it reads as destructive) |
|
|
136
134
|
| `--base-icon-search` | magnifying glass | search inputs, command palette — find **by text** |
|
|
137
135
|
| `--base-icon-filter` | funnel | refine / **narrow a list** by criteria (filter toggles, faceted search) — distinct from `search` |
|
|
136
|
+
| `--base-icon-refresh` | two curved arrows | reload / re-fetch a view or dataset |
|
|
138
137
|
| `--base-icon-check` / `--base-icon-indeterminate` | `✓` / `−` | **selection** pair (checkboxes, multiselect, tree nodes): `check` = selected, `indeterminate` = a tri-state parent whose children are a mix |
|
|
138
|
+
| `--base-icon-copy` | two overlapping sheets | copy-to-clipboard |
|
|
139
|
+
| `--base-icon-ellipsis` | three dots `⋯` | "more / overflow" affordance — **rotate-one-glyph** for the vertical `⋮` variant (rotate 90°) |
|
|
140
|
+
| `--base-icon-save` | floppy disk | persist / commit |
|
|
139
141
|
|
|
140
142
|
Three intentional distinctions:
|
|
141
143
|
|
|
@@ -162,7 +164,7 @@ that redeclares them, loaded *after* `base.css`:
|
|
|
162
164
|
|
|
163
165
|
Because pure-admin-core, the components and any consumer all read the same variables, that one block
|
|
164
166
|
re-themes all of them at once. This is the same model as
|
|
165
|
-
[`@keenmate/pure-admin-themes`](https://github.com/
|
|
167
|
+
[`@keenmate/pure-admin-themes`](https://github.com/Keenmate/pure-admin-themes), so the same CLI and
|
|
166
168
|
publishing infrastructure applies.
|
|
167
169
|
|
|
168
170
|
### Mode & variant class placement
|
|
@@ -210,4 +212,4 @@ One intentional difference: `utilities.scss` here `@use`s `_fonts.scss` so the g
|
|
|
210
212
|
|
|
211
213
|
## License
|
|
212
214
|
|
|
213
|
-
MIT ©
|
|
215
|
+
MIT © Keenmate. The grid is derived from [Pure](https://purecss.io/) (Yahoo!, BSD).
|
package/dist/css/base.css
CHANGED
|
@@ -137,8 +137,12 @@
|
|
|
137
137
|
--base-icon-delete: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 6h18%22/%3E%3Cpath d=%22M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2%22/%3E%3Cpath d=%22M10 11v6%22/%3E%3Cpath d=%22M14 11v6%22/%3E%3C/svg%3E");
|
|
138
138
|
--base-icon-search: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Ccircle cx=%2211%22 cy=%2211%22 r=%228%22/%3E%3Cpath d=%22m21 21-4.3-4.3%22/%3E%3C/svg%3E");
|
|
139
139
|
--base-icon-filter: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpolygon points=%2222 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3%22/%3E%3C/svg%3E");
|
|
140
|
+
--base-icon-refresh: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8%22/%3E%3Cpath d=%22M21 3v5h-5%22/%3E%3Cpath d=%22M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16%22/%3E%3Cpath d=%22M3 21v-5h5%22/%3E%3C/svg%3E");
|
|
140
141
|
--base-icon-check: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M20 6 9 17l-5-5%22/%3E%3C/svg%3E");
|
|
141
142
|
--base-icon-indeterminate: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 12h14%22/%3E%3C/svg%3E");
|
|
143
|
+
--base-icon-copy: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Crect width=%2214%22 height=%2214%22 x=%228%22 y=%228%22 rx=%222%22 ry=%222%22/%3E%3Cpath d=%22M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2%22/%3E%3C/svg%3E");
|
|
144
|
+
--base-icon-ellipsis: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Ccircle cx=%2212%22 cy=%2212%22 r=%221%22/%3E%3Ccircle cx=%2219%22 cy=%2212%22 r=%221%22/%3E%3Ccircle cx=%225%22 cy=%2212%22 r=%221%22/%3E%3C/svg%3E");
|
|
145
|
+
--base-icon-save: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z%22/%3E%3Cpath d=%22M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7%22/%3E%3Cpath d=%22M7 3v4a1 1 0 0 0 1 1h7%22/%3E%3C/svg%3E");
|
|
142
146
|
--base-color-1: #f59e0b;
|
|
143
147
|
--base-color-2: #ec4899;
|
|
144
148
|
--base-color-3: #10b981;
|
package/dist/css/pure-css.css
CHANGED
|
@@ -2446,7 +2446,7 @@ body.loaded .pc-sidebar__search {
|
|
|
2446
2446
|
}
|
|
2447
2447
|
.pc-sidebar__search:hover {
|
|
2448
2448
|
border-color: #0ea5e9;
|
|
2449
|
-
color: var(--
|
|
2449
|
+
color: var(--base-input-color);
|
|
2450
2450
|
}
|
|
2451
2451
|
.sidebar-hidden .pc-layout__sidebar--icon-collapse .pc-sidebar__search {
|
|
2452
2452
|
width: auto;
|
|
@@ -2481,7 +2481,7 @@ body.loaded .pc-sidebar__search {
|
|
|
2481
2481
|
border: none;
|
|
2482
2482
|
outline: none;
|
|
2483
2483
|
background: transparent;
|
|
2484
|
-
color: var(--
|
|
2484
|
+
color: var(--base-input-color);
|
|
2485
2485
|
font: inherit;
|
|
2486
2486
|
padding: 0;
|
|
2487
2487
|
}
|
|
@@ -3131,7 +3131,6 @@ body.pc-layout--sticky .pc-layout__inner {
|
|
|
3131
3131
|
border-top: 1px solid var(--pc-border-color);
|
|
3132
3132
|
}
|
|
3133
3133
|
|
|
3134
|
-
/* Pure Admin Visual Framework - Default Font Definitions */
|
|
3135
3134
|
.font-family-system {
|
|
3136
3135
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
3137
3136
|
}
|
|
@@ -6082,8 +6081,12 @@ body.pc-layout--sticky .pc-layout__inner {
|
|
|
6082
6081
|
--base-icon-delete: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 6h18%22/%3E%3Cpath d=%22M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2%22/%3E%3Cpath d=%22M10 11v6%22/%3E%3Cpath d=%22M14 11v6%22/%3E%3C/svg%3E");
|
|
6083
6082
|
--base-icon-search: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Ccircle cx=%2211%22 cy=%2211%22 r=%228%22/%3E%3Cpath d=%22m21 21-4.3-4.3%22/%3E%3C/svg%3E");
|
|
6084
6083
|
--base-icon-filter: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpolygon points=%2222 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3%22/%3E%3C/svg%3E");
|
|
6084
|
+
--base-icon-refresh: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8%22/%3E%3Cpath d=%22M21 3v5h-5%22/%3E%3Cpath d=%22M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16%22/%3E%3Cpath d=%22M3 21v-5h5%22/%3E%3C/svg%3E");
|
|
6085
6085
|
--base-icon-check: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M20 6 9 17l-5-5%22/%3E%3C/svg%3E");
|
|
6086
6086
|
--base-icon-indeterminate: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 12h14%22/%3E%3C/svg%3E");
|
|
6087
|
+
--base-icon-copy: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Crect width=%2214%22 height=%2214%22 x=%228%22 y=%228%22 rx=%222%22 ry=%222%22/%3E%3Cpath d=%22M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2%22/%3E%3C/svg%3E");
|
|
6088
|
+
--base-icon-ellipsis: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Ccircle cx=%2212%22 cy=%2212%22 r=%221%22/%3E%3Ccircle cx=%2219%22 cy=%2212%22 r=%221%22/%3E%3Ccircle cx=%225%22 cy=%2212%22 r=%221%22/%3E%3C/svg%3E");
|
|
6089
|
+
--base-icon-save: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z%22/%3E%3Cpath d=%22M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7%22/%3E%3Cpath d=%22M7 3v4a1 1 0 0 0 1 1h7%22/%3E%3C/svg%3E");
|
|
6087
6090
|
--base-color-1: #f59e0b;
|
|
6088
6091
|
--base-color-2: #ec4899;
|
|
6089
6092
|
--base-color-3: #10b981;
|
package/dist/css/utilities.css
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keenmate/pure-css",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "The
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "The Keenmate CSS foundation — --base-* theming contract, PureCSS grid and utility classes. Extracted from pure-admin-core so docs sites, standalone pages and every web/svelte component share one theming layer.",
|
|
5
5
|
"style": "dist/css/pure-css.css",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./dist/css/pure-css.css",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"keenmate",
|
|
56
56
|
"pure-admin"
|
|
57
57
|
],
|
|
58
|
-
"author": "
|
|
58
|
+
"author": "Keenmate",
|
|
59
59
|
"license": "MIT",
|
|
60
60
|
"peerDependencies": {
|
|
61
61
|
"sass": "^1.0.0"
|
|
@@ -67,12 +67,12 @@
|
|
|
67
67
|
},
|
|
68
68
|
"repository": {
|
|
69
69
|
"type": "git",
|
|
70
|
-
"url": "git+https://github.com/
|
|
70
|
+
"url": "git+https://github.com/Keenmate/pure-css.git"
|
|
71
71
|
},
|
|
72
72
|
"bugs": {
|
|
73
|
-
"url": "https://github.com/
|
|
73
|
+
"url": "https://github.com/Keenmate/pure-css/issues"
|
|
74
74
|
},
|
|
75
|
-
"homepage": "https://github.com/
|
|
75
|
+
"homepage": "https://github.com/Keenmate/pure-css#readme",
|
|
76
76
|
"publishConfig": {
|
|
77
77
|
"access": "public"
|
|
78
78
|
},
|
|
@@ -216,9 +216,11 @@
|
|
|
216
216
|
|
|
217
217
|
// === Utility icons ===
|
|
218
218
|
// search = magnifying glass (find by text); filter = funnel (refine/narrow a
|
|
219
|
-
// list — distinct affordance from search, its own knob)
|
|
219
|
+
// list — distinct affordance from search, its own knob); refresh = two curved
|
|
220
|
+
// arrows (reload/re-fetch — consumers spin it while a refresh is in flight).
|
|
220
221
|
--base-icon-search: #{$base-icon-search};
|
|
221
222
|
--base-icon-filter: #{$base-icon-filter};
|
|
223
|
+
--base-icon-refresh: #{$base-icon-refresh};
|
|
222
224
|
|
|
223
225
|
// === Selection icons — checkbox / tree-node state pair ===
|
|
224
226
|
// check = ✓ (selected), indeterminate = − (tri-state parent, partially selected).
|
|
@@ -227,6 +229,15 @@
|
|
|
227
229
|
--base-icon-check: #{$base-icon-check};
|
|
228
230
|
--base-icon-indeterminate: #{$base-icon-indeterminate};
|
|
229
231
|
|
|
232
|
+
// === Action / affordance icons ===
|
|
233
|
+
// copy = two overlapping sheets (copy-to-clipboard); ellipsis = three dots
|
|
234
|
+
// ("more / overflow" — vertical variant is the same glyph rotated 90°);
|
|
235
|
+
// save = floppy disk. Consumed by pure-admin's --pa-icon-copy / -ellipsis /
|
|
236
|
+
// -save (which fell back to inline glyphs until these landed).
|
|
237
|
+
--base-icon-copy: #{$base-icon-copy};
|
|
238
|
+
--base-icon-ellipsis: #{$base-icon-ellipsis};
|
|
239
|
+
--base-icon-save: #{$base-icon-save};
|
|
240
|
+
|
|
230
241
|
// === Theme palette slots (1–9) + paired contrast text (WS7.6) ===
|
|
231
242
|
// Promoted into the --base-* contract so the branded/data-viz palette is
|
|
232
243
|
// themeable through the same namespace; --pc-color-N aliases these.
|
package/src/scss/_fonts.scss
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// @keenmate/pure-css — default font definitions
|
|
2
2
|
|
|
3
3
|
// Default framework fonts - themes can override these
|
|
4
4
|
// Note: Font size classes for <html> are in _utilities.scss (use px values for correct rem scaling)
|
package/src/scss/_sidebar.scss
CHANGED
|
@@ -221,7 +221,12 @@ body.pc-layout--sticky .pc-layout__sidebar {
|
|
|
221
221
|
// alias; inlined so the shell no longer depends on the component layer
|
|
222
222
|
// (variables/_components.scss now lives in pure-admin-core).
|
|
223
223
|
border-color: $accent-color;
|
|
224
|
-
|
|
224
|
+
// This framed box sits on the INPUT surface (--base-input-bg above), NOT
|
|
225
|
+
// the sidebar surface — so emphasise with the input text colour, not
|
|
226
|
+
// --pc-sidebar-text. In themes with a mode-independent sidebar (e.g.
|
|
227
|
+
// express: always-black sidebar → --pc-sidebar-text is white) the old
|
|
228
|
+
// sidebar-text hover went white-on-white on the light input bg.
|
|
229
|
+
color: var(--base-input-color);
|
|
225
230
|
}
|
|
226
231
|
|
|
227
232
|
// Collapsed rail ONLY (icon-collapse mode AND actually collapsed, i.e.
|
|
@@ -276,7 +281,14 @@ body.pc-layout--sticky .pc-layout__sidebar {
|
|
|
276
281
|
border: none;
|
|
277
282
|
outline: none;
|
|
278
283
|
background: transparent;
|
|
279
|
-
|
|
284
|
+
// The field shows through to the framed box's --base-input-bg surface,
|
|
285
|
+
// so its text must use the input text colour (--base-input-color), not
|
|
286
|
+
// the sidebar text colour. --pc-sidebar-text is tuned for the sidebar
|
|
287
|
+
// surface, which can be mode-independent (express: always-black sidebar
|
|
288
|
+
// → white sidebar text) and then renders white-on-white on a light
|
|
289
|
+
// input bg. --base-input-color is emitted per-mode alongside
|
|
290
|
+
// --base-input-bg, so the pair is always legible.
|
|
291
|
+
color: var(--base-input-color);
|
|
280
292
|
font: inherit;
|
|
281
293
|
padding: 0;
|
|
282
294
|
|
package/src/scss/pure-css.scss
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @keenmate/pure-css — full foundation bundle
|
|
2
2
|
// ============================================================================
|
|
3
|
-
// The
|
|
3
|
+
// The Keenmate CSS foundation, extracted from @keenmate/pure-admin-core so it
|
|
4
4
|
// can be consumed on its own (docs sites, standalone pages, non-admin portals)
|
|
5
5
|
// and so pure-admin-core, themes and any web/svelte component share ONE
|
|
6
6
|
// theming contract: the `--base-*` (and derived `--pc-*`) custom properties.
|
package/src/scss/utilities.scss
CHANGED
|
@@ -340,6 +340,8 @@ $base-rem: 1rem !default;
|
|
|
340
340
|
// - search: magnifying glass — search inputs, filter fields, command palette.
|
|
341
341
|
// - filter: funnel — narrow a list/table by criteria (filter toggles, faceted
|
|
342
342
|
// search). Distinct from `search` (find by text) — read as "refine".
|
|
343
|
+
// - refresh: two curved arrows (refresh-cw) — reload / re-fetch a view or
|
|
344
|
+
// dataset. Consumers spin it (CSS animation) while in flight.
|
|
343
345
|
//
|
|
344
346
|
// Selection — the checkbox / tree-node state pair (shared by web-multiselect,
|
|
345
347
|
// web-treeview, checkboxes — one tick everywhere):
|
|
@@ -363,10 +365,18 @@ $base-icon-delete: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/200
|
|
|
363
365
|
// Utility: magnifying glass (Lucide search) + funnel (Lucide filter).
|
|
364
366
|
$base-icon-search: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Ccircle cx=%2211%22 cy=%2211%22 r=%228%22/%3E%3Cpath d=%22m21 21-4.3-4.3%22/%3E%3C/svg%3E") !default;
|
|
365
367
|
$base-icon-filter: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpolygon points=%2222 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3%22/%3E%3C/svg%3E") !default;
|
|
368
|
+
// refresh = two curved arrows (Lucide refresh-cw): reload / re-fetch a view or dataset.
|
|
369
|
+
$base-icon-refresh: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8%22/%3E%3Cpath d=%22M21 3v5h-5%22/%3E%3Cpath d=%22M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16%22/%3E%3Cpath d=%22M3 21v-5h5%22/%3E%3C/svg%3E") !default;
|
|
366
370
|
// Selection: check = ✓ (Lucide check), indeterminate = − (Lucide minus). indeterminate
|
|
367
371
|
// shares the minus shape with `collapse` but is its own knob (selection ≠ disclosure).
|
|
368
372
|
$base-icon-check: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M20 6 9 17l-5-5%22/%3E%3C/svg%3E") !default;
|
|
369
373
|
$base-icon-indeterminate: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 12h14%22/%3E%3C/svg%3E") !default;
|
|
374
|
+
// copy = two overlapping sheets (Lucide copy); ellipsis = three dots (Lucide
|
|
375
|
+
// ellipsis, the "more / overflow" affordance — the vertical variant is the same
|
|
376
|
+
// glyph rotated 90°); save = floppy disk (Lucide save).
|
|
377
|
+
$base-icon-copy: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Crect width=%2214%22 height=%2214%22 x=%228%22 y=%228%22 rx=%222%22 ry=%222%22/%3E%3Cpath d=%22M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2%22/%3E%3C/svg%3E") !default;
|
|
378
|
+
$base-icon-ellipsis: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Ccircle cx=%2212%22 cy=%2212%22 r=%221%22/%3E%3Ccircle cx=%2219%22 cy=%2212%22 r=%221%22/%3E%3Ccircle cx=%225%22 cy=%2212%22 r=%221%22/%3E%3C/svg%3E") !default;
|
|
379
|
+
$base-icon-save: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z%22/%3E%3Cpath d=%22M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7%22/%3E%3Cpath d=%22M7 3v4a1 1 0 0 0 1 1h7%22/%3E%3C/svg%3E") !default;
|
|
370
380
|
|
|
371
381
|
// =============================================================================
|
|
372
382
|
// ALERT COLOR DERIVATION PARAMETERS
|