From c1dcb19c2273cd2fb60aae3ffcaf580c3ec3f69a Mon Sep 17 00:00:00 2001 From: Mitch Hijlkema Date: Sun, 30 Nov 2025 20:38:22 +0100 Subject: [PATCH] feat: clean up apps and add publish (#13) Reviewed-on: https://gitea.hijlkema.codes/Hijlkema.Codes/z-elements/pulls/13 Co-authored-by: Mitch Hijlkema Co-committed-by: Mitch Hijlkema --- .gitea/workflows/publish.yml | 134 +++++ apps/.gitkeep | 0 apps/showcase-e2e/.eslintrc.json | 22 - apps/showcase-e2e/playwright.config.ts | 68 --- apps/showcase-e2e/project.json | 20 - apps/showcase-e2e/src/example.spec.ts | 8 - apps/showcase-e2e/tsconfig.json | 19 - apps/showcase/.babelrc | 3 - apps/showcase/.eslintrc.json | 18 - apps/showcase/.swcrc | 8 - apps/showcase/index.html | 16 - apps/showcase/jest.config.ts | 11 - apps/showcase/project.json | 67 --- apps/showcase/public/favicon.ico | Bin 15086 -> 0 bytes apps/showcase/src/app/app.element.css | 499 ------------------ apps/showcase/src/app/app.element.spec.ts | 19 - apps/showcase/src/app/app.element.ts | 407 -------------- apps/showcase/src/assets/.gitkeep | 0 apps/showcase/src/main.ts | 1 - apps/showcase/src/styles.css | 1 - apps/showcase/src/test-setup.ts | 0 apps/showcase/tsconfig.app.json | 9 - apps/showcase/tsconfig.json | 30 -- apps/showcase/tsconfig.spec.json | 10 - apps/showcase/vite.config.ts | 34 -- .../directives/src/lib/async-directive.ts | 3 +- .../_internal/styles/src/lib/variable.func.ts | 2 +- 27 files changed, 137 insertions(+), 1272 deletions(-) create mode 100644 .gitea/workflows/publish.yml delete mode 100644 apps/.gitkeep delete mode 100644 apps/showcase-e2e/.eslintrc.json delete mode 100644 apps/showcase-e2e/playwright.config.ts delete mode 100644 apps/showcase-e2e/project.json delete mode 100644 apps/showcase-e2e/src/example.spec.ts delete mode 100644 apps/showcase-e2e/tsconfig.json delete mode 100644 apps/showcase/.babelrc delete mode 100644 apps/showcase/.eslintrc.json delete mode 100644 apps/showcase/.swcrc delete mode 100644 apps/showcase/index.html delete mode 100644 apps/showcase/jest.config.ts delete mode 100644 apps/showcase/project.json delete mode 100644 apps/showcase/public/favicon.ico delete mode 100644 apps/showcase/src/app/app.element.css delete mode 100644 apps/showcase/src/app/app.element.spec.ts delete mode 100644 apps/showcase/src/app/app.element.ts delete mode 100644 apps/showcase/src/assets/.gitkeep delete mode 100644 apps/showcase/src/main.ts delete mode 100644 apps/showcase/src/styles.css delete mode 100644 apps/showcase/src/test-setup.ts delete mode 100644 apps/showcase/tsconfig.app.json delete mode 100644 apps/showcase/tsconfig.json delete mode 100644 apps/showcase/tsconfig.spec.json delete mode 100644 apps/showcase/vite.config.ts diff --git a/.gitea/workflows/publish.yml b/.gitea/workflows/publish.yml new file mode 100644 index 0000000..6e1fc4b --- /dev/null +++ b/.gitea/workflows/publish.yml @@ -0,0 +1,134 @@ +name: Publish + +concurrency: + cancel-in-progress: false + group: publish-${{ github.ref_name }} + +env: + ACT_OWNER: ${{ github.repository_owner }} + ACT_REPOSITORY: ${{ github.repository }} + CGO_ENABLED: 0 + # Default comma-separated list of projects to build+publish. Can be overridden + # when manually dispatching the workflow via the `projects` input. + PUBLISH_PROJECTS: 'reviews-stars' + +on: + push: + tags: + - 'v*.*.*' + workflow_dispatch: + inputs: + projects: + description: 'Comma-separated list of Nx projects to build and publish' + required: false + default: 'reviews-stars' + version: + description: 'Semantic version to publish (e.g. 1.2.3). If omitted for tag runs, the tag name is used.' + required: false + npm_tag: + description: 'NPM dist-tag to use (overrides automatic selection). default: auto (latest for release, next for prerelease)' + required: false + +jobs: + build: + runs-on: ubuntu-latest + outputs: + projects: ${{ steps.set-projects.outputs.projects }} + env: + PUBLISH_PROJECTS: ${{ github.event.inputs.projects || env.PUBLISH_PROJECTS }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - run: git fetch --force --tags + - name: Set up Node.js + uses: actions/setup-node@v6 + with: + node-version: 22 + - name: Install dependencies + run: npm ci --legacy-peer-deps + - name: Build projects + run: | + echo "Projects to build: $PUBLISH_PROJECTS" + npx nx run-many --target=build --projects="$PUBLISH_PROJECTS" + - name: Upload dist artifact + uses: actions/upload-artifact@v4 + with: + name: dist + path: dist + - name: Set projects output (JSON array) + id: set-projects + run: | + # Convert comma-separated list into JSON array + IFS=',' read -ra PROJS <<< "$PUBLISH_PROJECTS" + json='[' + first=true + for p in "${PROJS[@]}"; do + p_trimmed=$(echo "$p" | xargs) + if [ "$first" = true ]; then + json+="\"$p_trimmed\"" + first=false + else + json+=",\"$p_trimmed\"" + fi + done + json+=']' + echo "projects=$json" >> "$GITHUB_OUTPUT" + + publish: + runs-on: ubuntu-latest + needs: build + strategy: + fail-fast: false + matrix: + project: ${{ fromJson(needs.build.outputs.projects) }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Download dist artifact + uses: actions/download-artifact@v4 + with: + name: dist + path: ./ + - name: Set up Node.js + uses: actions/setup-node@v6 + with: + node-version: 22 + - name: Determine version and npm tag + id: set-version + run: | + set -euo pipefail + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + if [ -n "${{ github.event.inputs.version }}" ]; then + VERSION="${{ github.event.inputs.version }}" + else + echo "No version provided for manual dispatch. Exiting." >&2 + exit 1 + fi + else + VERSION="${GITHUB_REF_NAME#v}" + fi + if [ -n "${{ github.event.inputs.npm_tag }}" ]; then + NPM_TAG="${{ github.event.inputs.npm_tag }}" + else + if echo "$VERSION" | grep -q "-"; then + NPM_TAG="next" + else + NPM_TAG="latest" + fi + fi + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "npm_tag=$NPM_TAG" >> "$GITHUB_OUTPUT" + - name: Configure npm auth + run: | + echo "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}" > ~/.npmrc + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Publish project + run: | + echo "Publishing ${{ matrix.project }} with version ${VERSION} and tag ${NPM_TAG}" + node tools/scripts/publish.mjs "${{ matrix.project }}" "${VERSION}" "${NPM_TAG}" + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} \ No newline at end of file diff --git a/apps/.gitkeep b/apps/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/apps/showcase-e2e/.eslintrc.json b/apps/showcase-e2e/.eslintrc.json deleted file mode 100644 index fbf2c97..0000000 --- a/apps/showcase-e2e/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends": ["plugin:playwright/recommended", "../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["src/**/*.{ts,js,tsx,jsx}"], - "rules": {} - } - ] -} diff --git a/apps/showcase-e2e/playwright.config.ts b/apps/showcase-e2e/playwright.config.ts deleted file mode 100644 index 5a13eaa..0000000 --- a/apps/showcase-e2e/playwright.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { workspaceRoot } from '@nx/devkit'; -import { nxE2EPreset } from '@nx/playwright/preset'; -import { defineConfig, devices } from '@playwright/test'; - -// For CI, you may want to set BASE_URL to the deployed application. -const baseURL = process.env['BASE_URL'] || 'http://localhost:4200'; - -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// require('dotenv').config(); - -/** - * See https://playwright.dev/docs/test-configuration. - */ -export default defineConfig({ - ...nxE2EPreset(__filename, { testDir: './src' }), - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - baseURL, - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: 'on-first-retry', - }, - /* Run your local dev server before starting the tests */ - webServer: { - command: 'npx nx serve showcase', - url: 'http://localhost:4200', - reuseExistingServer: !process.env.CI, - cwd: workspaceRoot, - }, - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, - }, - - { - name: 'firefox', - use: { ...devices['Desktop Firefox'] }, - }, - - { - name: 'webkit', - use: { ...devices['Desktop Safari'] }, - }, - - // Uncomment for mobile browsers support - /* { - name: 'Mobile Chrome', - use: { ...devices['Pixel 5'] }, - }, - { - name: 'Mobile Safari', - use: { ...devices['iPhone 12'] }, - }, */ - - // Uncomment for branded browsers - /* { - name: 'Microsoft Edge', - use: { ...devices['Desktop Edge'], channel: 'msedge' }, - }, - { - name: 'Google Chrome', - use: { ...devices['Desktop Chrome'], channel: 'chrome' }, - } */ - ], -}); diff --git a/apps/showcase-e2e/project.json b/apps/showcase-e2e/project.json deleted file mode 100644 index 866c0d6..0000000 --- a/apps/showcase-e2e/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "showcase-e2e", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/showcase-e2e/src", - "projectType": "application", - "tags": [], - "implicitDependencies": ["showcase"], - "targets": { - "e2e": { - "executor": "@nx/playwright:playwright", - "outputs": ["{workspaceRoot}/dist/.playwright/apps/showcase-e2e"], - "options": { - "config": "apps/showcase-e2e/playwright.config.ts" - } - }, - "lint": { - "executor": "@nx/eslint:lint" - } - } -} diff --git a/apps/showcase-e2e/src/example.spec.ts b/apps/showcase-e2e/src/example.spec.ts deleted file mode 100644 index fa8f1f3..0000000 --- a/apps/showcase-e2e/src/example.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test('has title', async ({ page }) => { - await page.goto('/'); - - // Expect h1 to contain a substring. - expect(await page.locator('h1').innerText()).toContain('Welcome'); -}); diff --git a/apps/showcase-e2e/tsconfig.json b/apps/showcase-e2e/tsconfig.json deleted file mode 100644 index 114364a..0000000 --- a/apps/showcase-e2e/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "allowJs": true, - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "sourceMap": false - }, - "include": [ - "**/*.ts", - "**/*.js", - "playwright.config.ts", - "src/**/*.spec.ts", - "src/**/*.spec.js", - "src/**/*.test.ts", - "src/**/*.test.js", - "src/**/*.d.ts" - ] -} diff --git a/apps/showcase/.babelrc b/apps/showcase/.babelrc deleted file mode 100644 index f2f3806..0000000 --- a/apps/showcase/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@nx/js/babel"] -} diff --git a/apps/showcase/.eslintrc.json b/apps/showcase/.eslintrc.json deleted file mode 100644 index 9d9c0db..0000000 --- a/apps/showcase/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/apps/showcase/.swcrc b/apps/showcase/.swcrc deleted file mode 100644 index a2d5b04..0000000 --- a/apps/showcase/.swcrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "jsc": { - "parser": { - "syntax": "typescript" - }, - "target": "es2016" - } -} diff --git a/apps/showcase/index.html b/apps/showcase/index.html deleted file mode 100644 index a182dce..0000000 --- a/apps/showcase/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - Showcase - - - - - - - - - - - diff --git a/apps/showcase/jest.config.ts b/apps/showcase/jest.config.ts deleted file mode 100644 index acff50d..0000000 --- a/apps/showcase/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'showcase', - preset: '../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - transform: { - '^.+\\.[tj]s$': '@swc/jest', - }, - moduleFileExtensions: ['ts', 'js', 'html'], - coverageDirectory: '../../coverage/apps/showcase', -}; diff --git a/apps/showcase/project.json b/apps/showcase/project.json deleted file mode 100644 index f0b19c9..0000000 --- a/apps/showcase/project.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "showcase", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/showcase/src", - "tags": [], - "targets": { - "build": { - "executor": "@nx/vite:build", - "outputs": ["{options.outputPath}"], - "defaultConfiguration": "production", - "options": { - "outputPath": "dist/apps/showcase" - }, - "configurations": { - "development": { - "mode": "development" - }, - "production": { - "mode": "production" - } - } - }, - "serve": { - "executor": "@nx/vite:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "showcase:build" - }, - "configurations": { - "development": { - "buildTarget": "showcase:build:development", - "hmr": true - }, - "production": { - "buildTarget": "showcase:build:production", - "hmr": false - } - } - }, - "preview": { - "executor": "@nx/vite:preview-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "showcase:build" - }, - "configurations": { - "development": { - "buildTarget": "showcase:build:development" - }, - "production": { - "buildTarget": "showcase:build:production" - } - } - }, - "lint": { - "executor": "@nx/eslint:lint" - }, - "test": { - "executor": "@nx/jest:jest", - "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], - "options": { - "jestConfig": "apps/showcase/jest.config.ts" - } - } - } -} diff --git a/apps/showcase/public/favicon.ico b/apps/showcase/public/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 span { - flex-grow: 1; - font-weight: 400; - transition-property: - background-color, - border-color, - color, - fill, - stroke, - opacity, - box-shadow, - transform, - filter, - backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.list-item-link > span > span { - color: rgba(107, 114, 128, 1); - display: block; - flex-grow: 1; - font-size: 0.75rem; - font-weight: 300; - line-height: 1rem; - transition-property: - background-color, - border-color, - color, - fill, - stroke, - opacity, - box-shadow, - transform, - filter, - backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.list-item-link svg:last-child { - height: 1rem; - transition-property: all; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - width: 1rem; -} -.list-item-link:hover { - color: rgba(255, 255, 255, 1); - background-color: hsla(162, 47%, 50%, 1); -} -.list-item-link:hover > span { -} -.list-item-link:hover > span > span { - color: rgba(243, 244, 246, 1); -} -.list-item-link:hover svg:last-child { - transform: translateX(0.25rem); -} - -#other-links { -} -.button-pill { - padding: 1.5rem 2rem; - transition-duration: 300ms; - transition-property: - background-color, - border-color, - color, - fill, - stroke, - opacity, - box-shadow, - transform, - filter, - backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - align-items: center; - display: flex; -} -.button-pill svg { - transition-property: - background-color, - border-color, - color, - fill, - stroke, - opacity, - box-shadow, - transform, - filter, - backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - flex-shrink: 0; - width: 3rem; -} -.button-pill > span { - letter-spacing: -0.025em; - font-weight: 400; - font-size: 1.125rem; - line-height: 1.75rem; - padding-left: 1rem; - padding-right: 1rem; -} -.button-pill span span { - display: block; - font-size: 0.875rem; - font-weight: 300; - line-height: 1.25rem; -} -.button-pill:hover svg, -.button-pill:hover { - color: rgba(255, 255, 255, 1) !important; -} -#nx-console:hover { - background-color: rgba(0, 122, 204, 1); -} -#nx-console svg { - color: rgba(0, 122, 204, 1); -} -#nx-console-jetbrains { - margin-top: 2rem; -} -#nx-console-jetbrains:hover { - background-color: rgba(255, 49, 140, 1); -} -#nx-console-jetbrains svg { - color: rgba(255, 49, 140, 1); -} -#nx-repo:hover { - background-color: rgba(24, 23, 23, 1); -} -#nx-repo svg { - color: rgba(24, 23, 23, 1); -} - -#nx-cloud { - margin-bottom: 2rem; - margin-top: 2rem; - padding: 2.5rem 2rem; -} -#nx-cloud > div { - align-items: center; - display: flex; -} -#nx-cloud > div svg { - border-radius: 0.375rem; - flex-shrink: 0; - width: 3rem; -} -#nx-cloud > div h2 { - font-size: 1.125rem; - font-weight: 400; - letter-spacing: -0.025em; - line-height: 1.75rem; - padding-left: 1rem; - padding-right: 1rem; -} -#nx-cloud > div h2 span { - display: block; - font-size: 0.875rem; - font-weight: 300; - line-height: 1.25rem; -} -#nx-cloud p { - font-size: 1rem; - line-height: 1.5rem; - margin-top: 1rem; -} -#nx-cloud pre { - margin-top: 1rem; -} -#nx-cloud a { - color: rgba(107, 114, 128, 1); - display: block; - font-size: 0.875rem; - line-height: 1.25rem; - margin-top: 1.5rem; - text-align: right; -} -#nx-cloud a:hover { - text-decoration: underline; -} - -#commands { - padding: 2.5rem 2rem; - - margin-top: 3.5rem; -} -#commands h2 { - font-size: 1.25rem; - font-weight: 400; - letter-spacing: -0.025em; - line-height: 1.75rem; - padding-left: 1rem; - padding-right: 1rem; -} -#commands p { - font-size: 1rem; - font-weight: 300; - line-height: 1.5rem; - margin-top: 1rem; - padding-left: 1rem; - padding-right: 1rem; -} -details { - align-items: center; - display: flex; - margin-top: 1rem; - padding-left: 1rem; - padding-right: 1rem; - width: 100%; -} -details pre > span { - color: rgba(181, 181, 181, 1); -} -summary { - border-radius: 0.5rem; - display: flex; - font-weight: 400; - padding: 0.5rem; - cursor: pointer; - transition-property: - background-color, - border-color, - color, - fill, - stroke, - opacity, - box-shadow, - transform, - filter, - backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -summary:hover { - background-color: rgba(243, 244, 246, 1); -} -summary svg { - height: 1.5rem; - margin-right: 1rem; - width: 1.5rem; -} - -#love { - color: rgba(107, 114, 128, 1); - font-size: 0.875rem; - line-height: 1.25rem; - margin-top: 3.5rem; - opacity: 0.6; - text-align: center; -} -#love svg { - color: rgba(252, 165, 165, 1); - width: 1.25rem; - height: 1.25rem; - display: inline; - margin-top: -0.25rem; -} - -@media screen and (min-width: 768px) { - #hero { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - #hero .logo-container { - display: flex; - } - #middle-content { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } -} diff --git a/apps/showcase/src/app/app.element.spec.ts b/apps/showcase/src/app/app.element.spec.ts deleted file mode 100644 index cf5ab76..0000000 --- a/apps/showcase/src/app/app.element.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { AppElement } from './app.element'; - -describe('AppElement', () => { - let app: AppElement; - - beforeEach(() => { - app = new AppElement(); - }); - - it('should create successfully', () => { - expect(app).toBeTruthy(); - }); - - it('should have a greeting', () => { - app.connectedCallback(); - - expect(app.querySelector('h1').innerHTML).toContain('Welcome showcase'); - }); -}); diff --git a/apps/showcase/src/app/app.element.ts b/apps/showcase/src/app/app.element.ts deleted file mode 100644 index 423207e..0000000 --- a/apps/showcase/src/app/app.element.ts +++ /dev/null @@ -1,407 +0,0 @@ -import './app.element.css'; - -export class AppElement extends HTMLElement { - public static observedAttributes = []; - - connectedCallback() { - const title = 'showcase'; - this.innerHTML = ` -
-
- -
-

- Hello there, - Welcome ${title} 👋 -

-
- - -
-
-

- - - - You're up and running -

- What's next? -
-
- - - -
-
- - - - - -
-

Next steps

-

Here are some things you can do with Nx:

-
- - - - - Add UI library - -
# Generate UI lib
-nx g @nx/angular:lib ui
-
-# Add a component
-nx g @nx/angular:component ui/src/lib/button
-
-
- - - - - View interactive project graph - -
nx graph
-
-
- - - - - Run affected commands - -
# see what's been affected by changes
-nx affected:graph
-
-# run tests for current changes
-nx affected:test
-
-# run e2e tests for current changes
-nx affected:e2e
-
-
- -

- Carefully crafted with - - - -

-
-
- `; - } -} -customElements.define('z-elements-root', AppElement); diff --git a/apps/showcase/src/assets/.gitkeep b/apps/showcase/src/assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/apps/showcase/src/main.ts b/apps/showcase/src/main.ts deleted file mode 100644 index fdb879d..0000000 --- a/apps/showcase/src/main.ts +++ /dev/null @@ -1 +0,0 @@ -import './app/app.element'; diff --git a/apps/showcase/src/styles.css b/apps/showcase/src/styles.css deleted file mode 100644 index 90d4ee0..0000000 --- a/apps/showcase/src/styles.css +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/showcase/src/test-setup.ts b/apps/showcase/src/test-setup.ts deleted file mode 100644 index e69de29..0000000 diff --git a/apps/showcase/tsconfig.app.json b/apps/showcase/tsconfig.app.json deleted file mode 100644 index 3253fc8..0000000 --- a/apps/showcase/tsconfig.app.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "types": ["node"] - }, - "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], - "include": ["src/**/*.ts"] -} diff --git a/apps/showcase/tsconfig.json b/apps/showcase/tsconfig.json deleted file mode 100644 index cee4bba..0000000 --- a/apps/showcase/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "files": [], - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "module": "ESNext", - "lib": ["ESNext", "DOM"], - "moduleResolution": "Node", - "strict": true, - "resolveJsonModule": true, - "isolatedModules": true, - "esModuleInterop": true, - "noEmit": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "skipLibCheck": true, - "types": ["vite/client"] - }, - "include": ["src"], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - } - ] -} diff --git a/apps/showcase/tsconfig.spec.json b/apps/showcase/tsconfig.spec.json deleted file mode 100644 index 9e1c0c7..0000000 --- a/apps/showcase/tsconfig.spec.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "files": ["src/test-setup.ts"], - "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] -} diff --git a/apps/showcase/vite.config.ts b/apps/showcase/vite.config.ts deleted file mode 100644 index c80091d..0000000 --- a/apps/showcase/vite.config.ts +++ /dev/null @@ -1,34 +0,0 @@ -/// -import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin'; -import { defineConfig } from 'vite'; - -export default defineConfig({ - root: __dirname, - cacheDir: '../../node_modules/.vite/apps/showcase', - - server: { - port: 4200, - host: 'localhost', - }, - - preview: { - port: 4300, - host: 'localhost', - }, - - plugins: [nxViteTsPaths()], - - // Uncomment this if you are using workers. - // worker: { - // plugins: [ nxViteTsPaths() ], - // }, - - build: { - outDir: '../../dist/apps/showcase', - emptyOutDir: true, - reportCompressedSize: true, - commonjsOptions: { - transformMixedEsModules: true, - }, - }, -}); diff --git a/libs/_internal/directives/src/lib/async-directive.ts b/libs/_internal/directives/src/lib/async-directive.ts index 30d5d3e..c5d2979 100644 --- a/libs/_internal/directives/src/lib/async-directive.ts +++ b/libs/_internal/directives/src/lib/async-directive.ts @@ -1,7 +1,7 @@ import { noChange } from 'lit'; import { AsyncDirective, directive } from 'lit/async-directive.js'; -import { Observable, Subject, tap } from 'rxjs'; +import { Observable, Subject, takeUntil, tap } from 'rxjs'; class Async extends AsyncDirective { /** Private variables */ @@ -23,6 +23,7 @@ class Async extends AsyncDirective { render(observable: Observable) { observable .pipe( + takeUntil(this.destroy$), tap((value: unknown) => { this.setValue(value); }), diff --git a/libs/_internal/styles/src/lib/variable.func.ts b/libs/_internal/styles/src/lib/variable.func.ts index 9a68015..0c49ecc 100644 --- a/libs/_internal/styles/src/lib/variable.func.ts +++ b/libs/_internal/styles/src/lib/variable.func.ts @@ -1,5 +1,5 @@ import { unsafeCSS } from 'lit'; -export function variable(variableName: string, defaultValue?: string) { +export function variable(variableName: `--${string}`, defaultValue?: string) { return unsafeCSS(`var(${variableName}${defaultValue ? `, ${defaultValue}` : ''})`); }