Skip to content
Merged

Dev #20

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
31626c4
feat: init
Exerbaind Jul 23, 2025
11697e1
feat: icon upd
Exerbaind Jul 23, 2025
e83a5f1
Merge pull request #1 from OpenBuilders/init
Exerbaind Jul 24, 2025
dfbd065
feat: groups
Exerbaind Jul 25, 2025
b9c1f3b
fix: groupitem styles
Exerbaind Jul 25, 2025
c88fba8
Merge pull request #2 from OpenBuilders/group-components
Exerbaind Jul 25, 2025
c4ac1b5
fix: icons
Exerbaind Jul 25, 2025
453cf09
fix: styles
Exerbaind Jul 28, 2025
24d4769
feat: icons default color storybook
Exerbaind Jul 28, 2025
37b7dac
feat: toggle
Exerbaind Jul 28, 2025
614fe22
feat: group styles
Exerbaind Jul 28, 2025
64613fb
Merge pull request #3 from OpenBuilders/new-components
Exerbaind Jul 28, 2025
995a20a
fix
Exerbaind Jul 28, 2025
9b8e809
feat: building comds
Exerbaind Jul 28, 2025
5b2b002
fix: node vers
Exerbaind Jul 28, 2025
b479cde
fix: yml
Exerbaind Jul 28, 2025
431901a
v0.0.2-dev.0
actions-user Jul 28, 2025
e7f461f
fix: build command
Exerbaind Jul 28, 2025
51f9e68
pull dev
Exerbaind Jul 28, 2025
7131f72
v0.0.2-dev.1
actions-user Jul 28, 2025
a2738c0
wip: input
Exerbaind Aug 21, 2025
76536dd
feat: input
Exerbaind Aug 21, 2025
92a68cf
wip: select
Exerbaind Aug 21, 2025
95cfa94
wip: select
Exerbaind Aug 21, 2025
dc8128a
feat: colors, text component
Exerbaind Jan 27, 2026
e05f6eb
feat: group, group item, image
Exerbaind Jan 27, 2026
f30a680
feat: select, dropdown, new icons
Exerbaind Jan 28, 2026
7aa91c7
feat: icon stiries, custom icon prop
Exerbaind Jan 28, 2026
85790bb
feat: skeleton to group component
Exerbaind Jan 28, 2026
ba950da
feat: toast
Exerbaind Jan 28, 2026
950bcfd
fix: toast stories
Exerbaind Jan 28, 2026
3b222a1
feat: button
Exerbaind Jan 29, 2026
eaf4519
feat: dialog modal
Exerbaind Jan 29, 2026
3429227
feat: spinner
Exerbaind Jan 29, 2026
1e47467
feat: sheet
Exerbaind Jan 29, 2026
ec2658f
feat: readme
Exerbaind Jan 29, 2026
85e2094
Merge pull request #4 from OpenBuilders/new-components-2
Exerbaind Jan 29, 2026
107d9db
v0.0.2-dev.2
actions-user Jan 29, 2026
2b61a3f
feat: release prep
Exerbaind Jan 29, 2026
b20f7ad
fix: mc
Exerbaind Jan 29, 2026
07c4f6e
Merge pull request #5 from OpenBuilders/release-prep
Exerbaind Jan 29, 2026
61fd87e
v0.0.1-dev.0
actions-user Jan 29, 2026
3ebaef7
feat: release cmds
Exerbaind Jan 29, 2026
9a5c658
fix: mc
Exerbaind Jan 29, 2026
0239f8c
Merge pull request #6 from OpenBuilders/release-prep
Exerbaind Jan 29, 2026
7c58e82
v0.1.0-dev.1
actions-user Jan 29, 2026
966281f
feat: styles injection
Exerbaind Jan 29, 2026
983fabf
Merge pull request #7 from OpenBuilders/styles-injection
Exerbaind Jan 29, 2026
9971b3a
v0.1.0-dev.2
actions-user Jan 29, 2026
a0e4e1e
feat: up version
Exerbaind Jan 29, 2026
79fefb5
Merge pull request #8 from OpenBuilders/up-version
Exerbaind Jan 29, 2026
2401788
v0.1.0-dev.3
actions-user Jan 29, 2026
26f8290
feat: theme prop
Exerbaind Jan 29, 2026
f162279
feat: up version
Exerbaind Jan 29, 2026
ac371f7
Merge pull request #9 from OpenBuilders/theme-prop
Exerbaind Jan 29, 2026
9145a51
v0.1.0-dev.4
actions-user Jan 29, 2026
1baf031
feat: prod version
Exerbaind Feb 2, 2026
42205b0
feat: deploy
Exerbaind Feb 4, 2026
f88be86
Merge pull request #10 from OpenBuilders/prod-release
Exerbaind Feb 4, 2026
bc77d42
feat: yarn.lock
Exerbaind Feb 4, 2026
71e2adc
Merge pull request #11 from OpenBuilders/fix-lock
Exerbaind Feb 4, 2026
e2be798
v0.2.1-dev.0
actions-user Feb 4, 2026
43a1576
feat: storybook deploy
Exerbaind Feb 4, 2026
f6be380
Merge pull request #12 from OpenBuilders/fix/storyboo-deploy
Exerbaind Feb 4, 2026
18d84a2
v0.2.1-dev.1
actions-user Feb 4, 2026
f0ec20f
feat: build, deploy
Exerbaind Feb 4, 2026
39ba9d8
delete CHANGELOG.md
Exerbaind Feb 4, 2026
16b109c
Merge pull request #13 from OpenBuilders/fix/sstorybook-build-1
Exerbaind Feb 4, 2026
d5a6fc8
feat: publish.yml
Exerbaind Feb 4, 2026
154fbc2
Merge pull request #14 from OpenBuilders/fix/deploy
Exerbaind Feb 4, 2026
e30bcb0
fix: publish.yml
Exerbaind Feb 4, 2026
d1b474d
Merge pull request #15 from OpenBuilders/fix/deploy
Exerbaind Feb 4, 2026
6cfdf45
feat: publish.yml
Exerbaind Feb 4, 2026
68e06a9
Merge pull request #16 from OpenBuilders/fix/deploy
Exerbaind Feb 4, 2026
60b17b2
upd: publish.yml
Exerbaind Feb 4, 2026
d99dadd
Merge pull request #17 from OpenBuilders/fix/deploy
Exerbaind Feb 4, 2026
7b795ca
upd: package.json
Exerbaind Feb 4, 2026
905f22e
Merge pull request #18 from OpenBuilders/fix/deploy
Exerbaind Feb 4, 2026
ce17c87
feat: prod version
Exerbaind Feb 4, 2026
ff76d66
Merge pull request #19 from OpenBuilders/feat/prod-version
Exerbaind Feb 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Publish Package

on:
push:
branches:
- dev
- main

jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
env:
NODE_AUTH_TOKEN: ""
NPM_CONFIG_USERCONFIG: ${{ github.workspace }}/.npmrc
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "yarn"
registry-url: "https://registry.npmjs.org"

- name: Upgrade npm (OIDC required)
run: npm i -g npm@11.5.1

- name: Ensure npmrc without token
run: |
printf "%s\n" "@telegram-tools:registry=https://registry.npmjs.org/" > "$NPM_CONFIG_USERCONFIG"

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Show npm version
run: |
npm -v
echo "authToken=$(npm config get //registry.npmjs.org/:_authToken)"

- name: Check version change
id: version_check
run: |
BEFORE_SHA="${{ github.event.before }}"
if [ "$BEFORE_SHA" = "0000000000000000000000000000000000000000" ]; then
echo "version_changed=true" >> "$GITHUB_OUTPUT"
exit 0
fi

if ! git cat-file -e "${BEFORE_SHA}:package.json" 2>/dev/null; then
echo "version_changed=true" >> "$GITHUB_OUTPUT"
exit 0
fi

PREV_VERSION=$(git show "${BEFORE_SHA}:package.json" | node -e "const fs=require('fs');const data=fs.readFileSync(0,'utf8');console.log(JSON.parse(data).version||'')")
CURR_VERSION=$(node -e "const fs=require('fs');const data=fs.readFileSync('package.json','utf8');console.log(JSON.parse(data).version||'')")

if [ -z "$PREV_VERSION" ] || [ -z "$CURR_VERSION" ]; then
echo "version_changed=true" >> "$GITHUB_OUTPUT"
exit 0
fi

if [ "$PREV_VERSION" != "$CURR_VERSION" ]; then
echo "version_changed=true" >> "$GITHUB_OUTPUT"
else
echo "version_changed=false" >> "$GITHUB_OUTPUT"
fi

- name: Build
if: steps.version_check.outputs.version_changed == 'true'
run: yarn build

- name: Publish dev tag
if: github.ref == 'refs/heads/dev' && steps.version_check.outputs.version_changed == 'true'
run: npm publish --tag dev --provenance --access public

- name: Publish latest
if: github.ref == 'refs/heads/main' && steps.version_check.outputs.version_changed == 'true'
run: npm publish --provenance --access public
27 changes: 27 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

*storybook.log
storybook-static
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@telegram-tools:registry=https://registry.npmjs.org/
42 changes: 42 additions & 0 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import type { StorybookConfig } from "@storybook/react-vite";

const config: StorybookConfig = {
stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
addons: ["@storybook/addon-essentials", "@storybook/addon-themes"],
framework: {
name: "@storybook/react-vite",
options: {},
},
viteFinal: async (config) => {
config.base = "./";
if (config.plugins) {
config.plugins = config.plugins.filter(
(plugin) => plugin && plugin.name !== "inject-css-import"
);
}
if (config.build) {
delete config.build.lib;
if (config.build.rollupOptions) {
delete config.build.rollupOptions.external;
const output = config.build.rollupOptions.output;
if (Array.isArray(output)) {
output.forEach((item) => {
if (item && "assetFileNames" in item) {
delete item.assetFileNames;
}
});
} else if (output && "assetFileNames" in output) {
delete output.assetFileNames;
}
}
}
// Добавляем поддержку SCSS модулей
if (config.css) {
config.css.modules = {
localsConvention: "camelCase",
};
}
return config;
},
};
export default config;
68 changes: 68 additions & 0 deletions .storybook/preview.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import React, { useEffect } from "react";
import type { Preview } from "@storybook/react-vite";
import { withThemeByDataAttribute } from "@storybook/addon-themes";
import "../src/styles/index.scss";

const withThemeBackground = (Story: React.ComponentType) => {
return (
<div
style={{
backgroundColor: "var(--color-background-secondary)",
minHeight: "100vh",
padding: 0,
margin: 0,
}}
>
<Story />
</div>
);
};

export const decorators = [
(Story) => {
useEffect(() => {
const style = document.createElement("style");
style.innerHTML = `
#storybook-root, .sb-show-main, .docs-story, .sb-main-padded {
padding: 0 !important;
margin: 0 !important;
background: none !important;
}
`;
document.head.appendChild(style);
return () => {
document.head.removeChild(style);
};
}, []);
return <Story />;
},
];

const preview: Preview = {
parameters: {
controls: {
disableSaveFromUI: true,
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
},
},
backgrounds: {
disable: true,
},
},
decorators: [
withThemeByDataAttribute({
themes: {
light: "light",
dark: "dark",
},
defaultTheme: "light",
attributeName: "theme-mode",
}),
withThemeBackground,
...decorators,
],
};

export default preview;
7 changes: 7 additions & 0 deletions .storybook/vitest.setup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import * as a11yAddonAnnotations from "@storybook/addon-a11y/preview";
import { setProjectAnnotations } from '@storybook/react-vite';
import * as projectAnnotations from './preview';

// This is an important step to apply the right configuration when testing your stories.
// More info at: https://storybook.js.org/docs/api/portable-stories/portable-stories-vitest#setprojectannotations
setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]);
38 changes: 37 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,37 @@
# ui-kit-public
# ui-kit-public

Open-source, iOS-like UI component library built with React.

## Install

```bash
npm install @telegram-tools/ui-kit

yarn add @telegram-tools/ui-kit
```

## Usage

```tsx
import "@telegram-tools/ui-kit/dist/index.css";
import { Button, Text, ThemeProvider } from "@telegram-tools/ui-kit";

export function Example() {
return (
<ThemeProvider>
<div>
<Text type="title3">Hello</Text>
<Button text="Click" onClick={() => {}} />
</div>
</ThemeProvider>
);
}
```

`ThemeProvider` sets the `theme-mode` attribute on `html` and pulls the theme from Telegram WebApp, or from the `theme` prop if provided.

## Storybook

```text
https://ui-kit-public-fe-stage-en8vi.ondigitalocean.app/
```
32 changes: 32 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format
import storybook from "eslint-plugin-storybook";

import js from "@eslint/js";
import globals from "globals";
import reactHooks from "eslint-plugin-react-hooks";
import reactRefresh from "eslint-plugin-react-refresh";
import tseslint from "typescript-eslint";
import { globalIgnores } from "eslint/config";

export default tseslint.config(
[
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
js.configs.recommended,
tseslint.configs.recommended,
reactHooks.configs["recommended-latest"],
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
rules: {
"react-refresh/only-export-components": "off",
},
},
],
storybook.configs["flat/recommended"]
);
12 changes: 12 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>UI Kit</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
Loading