Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
3423be6
refactor(v1-components): Extracted shared remote endpoint root helper
cmath10 Mar 2, 2026
4ee2dc3
сhore: Run eslint --fix on repository
cmath10 Mar 2, 2026
1c5e913
docs: Clarify lowercase commit type convention in commit-workflow skill
cmath10 Mar 2, 2026
1fdeb7e
docs: Require reading commit workflow skill before commits
cmath10 Mar 2, 2026
c1d18a9
build(v1-components): Format declaration output using TypeScript printer
cmath10 Mar 2, 2026
5e040c6
fix(v1-components): Align select option default isSelected return type
cmath10 Mar 2, 2026
fc4d893
refactor(v1-components): Hardcode endpoint root component list intern…
cmath10 Mar 2, 2026
defa95f
feat(v1-components): UiCalendar component, tests, and Storybook docs …
cmath10 Mar 2, 2026
356285c
feat(v1-components): UiSlider component, tests, and Storybook guides …
cmath10 Mar 2, 2026
6c66312
feat(v1-components): UiSwitch component, styles, tests, and Storybook…
cmath10 Mar 2, 2026
92d0481
feat(v1-components): UiAlert component, tests, and Storybook guides w…
cmath10 Mar 3, 2026
dad04af
chore: Ignore generated directories in eslint
cmath10 Mar 3, 2026
20099b1
feat(v1-components): UiCollapse components were added with slot-based…
cmath10 Mar 3, 2026
c2426ed
chore: Simplifying types
cmath10 Mar 3, 2026
6393710
chore: Actualized yarn.lock
cmath10 Mar 3, 2026
60fe8d3
chore: Yarn lockfile minimatch vulnerabilities were updated
cmath10 Mar 3, 2026
cd03c8f
chore: Yarn lockfile rollup vulnerability was updated
cmath10 Mar 3, 2026
7c6b671
feat(v1-components): UiTimePicker component and docs were added
cmath10 Mar 3, 2026
525b30a
fix(v1-components): UiTextbox input sizing was corrected
cmath10 Mar 3, 2026
d98ed99
feat(v1-components): UiDatePicker component, tests and docs were added
cmath10 Mar 3, 2026
26462e6
feat(v1-components): UiInfobox component, tests and docs were added
cmath10 Mar 3, 2026
ff9c40d
feat(v1-components): UiAddButton component, tests and docs were added
cmath10 Mar 3, 2026
73fde6e
feat(v1-components): UiNumberStepper and UiTextbox autofit were added
cmath10 Mar 3, 2026
070a931
refactor(v1-components): Host exports were moved to barrel and provid…
cmath10 Mar 3, 2026
4ffe4af
fix(v1-components): UiRadio aria handling and accessibility docs were…
cmath10 Mar 3, 2026
df2b057
feat(v1-components): UiField remote-only component was migrated
cmath10 Mar 4, 2026
729ec2b
fix(v1-components): Host internal imports were decoupled from host en…
cmath10 Mar 4, 2026
7b52a41
test(v1-endpoint): Worker E2E test coverage was added
cmath10 Mar 4, 2026
7dd1c2f
refactor(v1-components): Endpoint root component list was extracted t…
cmath10 Mar 4, 2026
c8885fd
chore: V1-pages references were removed from test config and lockfile
cmath10 Mar 4, 2026
9b9f833
refactor(v1-types): HostApi type was extracted and reused
cmath10 Mar 4, 2026
d8561b3
chore(v1-contexts): Unused floating-ui dependencies were removed
cmath10 Mar 4, 2026
2266325
fix(v1-endpoint): Build and test workspace configuration were corrected
cmath10 Mar 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
16 changes: 16 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,19 @@ jobs:

- name: Run typecheck tests
run: yarn vitest run -c packages/v1-contexts/vitest.config.ts --typecheck.only --typecheck.checker tsc --typecheck.tsconfig packages/v1-contexts/tsconfig.json

- name: Install Playwright Chromium
if: ${{ matrix.node-version == '24.x' }}
run: yarn workspace @retailcrm/embed-ui-v1-endpoint exec playwright install --with-deps chromium

- name: Run v1-endpoint e2e tests
if: ${{ matrix.node-version == '24.x' }}
run: yarn workspace @retailcrm/embed-ui-v1-endpoint run test:e2e

- name: Upload v1-endpoint e2e screenshots
if: ${{ failure() && matrix.node-version == '24.x' }}
uses: actions/upload-artifact@v4
with:
name: v1-endpoint-playwright-screenshots-${{ matrix.node-version }}
path: packages/v1-endpoint/artifacts/playwright/screenshots
if-no-files-found: ignore
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ dist
generated
node_modules
coverage
packages/v1-endpoint/artifacts/

.npmrc
.pnp.cjs
Expand Down
22 changes: 1 addition & 21 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,27 +93,7 @@ yarn workspace @retailcrm/embed-ui-v1-components run storybook:build
```

## Commit Workflow
- Commit format: Conventional Commits.
- Commit message language: English.
- Scope rule: use workspace folder name (not npm package name).
- Valid workspace scopes currently are:
- `v1-components`
- `v1-contexts`
- `v1-testing`
- `v1-types`
- For root/global changes, scope may be omitted.
- Split commits by logical intent.
- Keep commit subject concise and factual.
- Start commit subject description with an uppercase letter.
- Mention affected component(s) or area in subject description when applicable.
- Commit subject should describe completed change in past tense.
- Prefer passive voice for changelog-friendly phrasing.
- Do not amend/rewrite history unless explicitly requested.

Examples:
- `feat(v1-components): UiSelect searchable option group header added`
- `fix(v1-contexts): OrderContext missing customer id handling corrected`
- `docs: AGENTS commit workflow section updated`
- Before creating commits, you must read `skills/commit-workflow/SKILL.md` and follow its rules.

## Skills
- Repository-local skills are available under `skills/`.
Expand Down
66 changes: 64 additions & 2 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
import { defineConfig } from 'eslint/config'

import globals from 'globals'

import pluginDependencies from '@omnicajs/eslint-plugin-dependencies'
import pluginJs from '@eslint/js'
import pluginTs from 'typescript-eslint'
import pluginVue from 'eslint-plugin-vue'

export default [
export default defineConfig([
{ files: ['**/*.{js,mjs,cjs,ts}'] },
{
plugins: {
dependencies: pluginDependencies,
},
languageOptions: {
globals: {
ymaps3: true,
Expand Down Expand Up @@ -63,6 +69,61 @@ export default [
fixStyle: 'separate-type-imports',
}],
'@typescript-eslint/naming-convention': 'off',

'dependencies/import-style': ['error', {
maxSingleLineLength: 90,
maxSingleLineSpecifiers: 3,
}],
'dependencies/separate-type-imports': 'error',
'dependencies/separate-type-partitions': 'error',
'dependencies/sort-named-imports': ['error', {
type: 'alphabetical',
ignoreAlias: true,
}],
'dependencies/sort-imports': ['error', {
type: 'alphabetical',
imports: {
orderBy: 'alias',
splitDeclarations: true,
},
groups: [
'side-effect-style',
'side-effect',
[
'type-import',
'type-external',
'type-vue-components',
'type-internal',
'type-parent',
'type-sibling',
'type-index',
],
'builtin',
'value-external',
'value-vue-components',
'value-internal',
['value-parent', 'value-sibling'],
'index',
'ts-equals-import',
'unknown',
],
customGroups: [{
groupName: 'type-vue-components',
selector: 'type',
elementNamePattern: ['\\.(svg|vue)$'],
}, {
groupName: 'value-vue-components',
elementNamePattern: ['\\.(svg|vue)$'],
}],
newlinesInside: 1,
partitions: {
orderBy: 'type-first',
splitBy: {
comments: false,
newlines: true,
},
},
}],
},
},
pluginJs.configs.recommended,
Expand Down Expand Up @@ -111,4 +172,5 @@ export default [
},
{ ignores: ['dist/*'] },
{ ignores: ['**/dist/*'] },
]
{ ignores: ['packages/**/generated/**'] },
])
35 changes: 20 additions & 15 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import type {
ComputedRef,
WritableComputedRef,
} from 'vue'
import type { ComputedRef, WritableComputedRef } from 'vue'

import type {
Endpoint,
MessageEndpoint,
RemoteCallable,
} from '@remote-ui/rpc'
import type { Endpoint, MessageEndpoint, RemoteCallable } from '@remote-ui/rpc'

import type {
ContextAccessor,
Expand All @@ -26,12 +19,24 @@ import type {

import type { Router } from '@omnicajs/symfony-router'

import type { Schema as CustomerCardSchema } from '@retailcrm/embed-ui-v1-contexts/types/customer/card'
import type { Schema as CustomerCardPhoneSchema } from '@retailcrm/embed-ui-v1-contexts/types/customer/card-phone'
import type { Schema as OrderCardSchema } from '@retailcrm/embed-ui-v1-contexts/types/order/card'
import type { Schema as OrderCardSettingsSchema } from '@retailcrm/embed-ui-v1-contexts/types/order/card-settings'
import type { Schema as CurrentUserSchema } from '@retailcrm/embed-ui-v1-contexts/types/user/current'
import type { Schema as SettingsSchema } from '@retailcrm/embed-ui-v1-contexts/types/settings'
import type {
Schema as CurrentUserSchema,
} from '@retailcrm/embed-ui-v1-contexts/types/user/current'
import type {
Schema as CustomerCardPhoneSchema,
} from '@retailcrm/embed-ui-v1-contexts/types/customer/card-phone'
import type {
Schema as CustomerCardSchema,
} from '@retailcrm/embed-ui-v1-contexts/types/customer/card'
import type {
Schema as OrderCardSchema,
} from '@retailcrm/embed-ui-v1-contexts/types/order/card'
import type {
Schema as OrderCardSettingsSchema,
} from '@retailcrm/embed-ui-v1-contexts/types/order/card-settings'
import type {
Schema as SettingsSchema,
} from '@retailcrm/embed-ui-v1-contexts/types/settings'

import type { SchemaList } from '@retailcrm/embed-ui-v1-contexts/types'

Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"@omnicajs/symfony-router": "^1.0.0",
"@omnicajs/vue-remote": "^0.2.8",
"@remote-ui/rpc": "^1.4.5",
"@retailcrm/embed-ui-v1-components": "^0.9.10",
"@retailcrm/embed-ui-v1-contexts": "^0.9.10",
"@retailcrm/embed-ui-v1-types": "^0.9.10"
},
Expand All @@ -49,6 +50,7 @@
"@eslint/js": "^9.39.1",
"@modulify/git-toolkit": "^0.0.2",
"@modulify/pkg": "^1.0.1",
"@omnicajs/eslint-plugin-dependencies": "^0.0.2",
"@retailcrm/embed-ui-v1-testing": "^0.9.10",
"@types/git-semver-tags": "^7.0.0",
"@types/node": "^22.19.2",
Expand Down
23 changes: 23 additions & 0 deletions packages/v1-components/src/common/components/add-button.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
export enum COLOR {
GREEN = 'green',
BLUE = 'blue',
RED = 'red',
YELLOW = 'yellow',
PURPLE = 'purple',
}

export type UiAddButtonProperties = {
type?: HTMLButtonElement['type'];
small?: boolean;
color?: COLOR | `${COLOR}`;
disabled?: boolean;
height?: number | string;
}

export const isNumeric = (value: number | string): boolean => !isNaN(Number(value))

export const normalizeHeight = (height: number | string): string => {
return isNumeric(height)
? `${height}px`
: `${height}`
}
22 changes: 22 additions & 0 deletions packages/v1-components/src/common/components/alert.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
export enum VARIANT {
PRIMARY = 'primary',
WARNING = 'warning',
SUCCESS = 'success',
DANGER = 'danger',
}

export type UiAlertProperties = {
variant?: VARIANT | `${VARIANT}`;
text?: string;
shown?: boolean;
closable?: boolean;
ellipsis?: boolean;
small?: boolean;
scrollToAlert?: boolean;
scrollBehavior?: ScrollBehavior | string;
fluid?: boolean;
}

export type UiAlertMethods = {
scrollIntoView (): void;
}
Loading