├── .dockerignore
├── .gitignore
├── .idea
└── .idea.WebComponents
│ └── .idea
│ ├── .gitignore
│ ├── .name
│ ├── encodings.xml
│ ├── indexLayout.xml
│ ├── inspectionProfiles
│ └── Project_Default.xml
│ ├── jsLibraryMappings.xml
│ ├── vcs.xml
│ └── watcherTasks.xml
├── LICENSE.md
├── WebComponents.sln
├── WebComponents
├── Client
│ ├── .gitignore
│ ├── main.ts
│ ├── public
│ │ └── favicon.ico
│ ├── scss
│ │ └── site.scss
│ ├── src
│ │ ├── BaseElement.ts
│ │ ├── Counter.ts
│ │ ├── FetchData.ts
│ │ └── RandomImage.ts
│ ├── types
│ │ ├── Client
│ │ │ ├── main.d.ts
│ │ │ └── src
│ │ │ │ ├── BaseElement.d.ts
│ │ │ │ ├── Counter.d.ts
│ │ │ │ └── FetchData.d.ts
│ │ ├── tsconfig.tsbuildinfo
│ │ └── vite.config.d.ts
│ └── vite-env.d.ts
├── Controllers
│ └── WeatherForecastController.cs
├── Data
│ └── WeatherForecast.cs
├── Dockerfile
├── Pages
│ ├── Error.cshtml
│ ├── Error.cshtml.cs
│ ├── Index.cshtml
│ ├── Index.cshtml.cs
│ ├── Privacy.cshtml
│ ├── Privacy.cshtml.cs
│ ├── Shared
│ │ ├── _Layout.cshtml
│ │ ├── _Layout.cshtml.css
│ │ └── _ValidationScriptsPartial.cshtml
│ ├── _ViewImports.cshtml
│ └── _ViewStart.cshtml
├── Program.cs
├── Properties
│ └── launchSettings.json
├── WebComponents.csproj
├── appsettings.Development.json
├── appsettings.json
├── package-lock.json
├── package.json
├── tsconfig.json
└── vite.config.ts
├── global.json
└── readme.md
/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.dockerignore
2 | **/.env
3 | **/.git
4 | **/.gitignore
5 | **/.project
6 | **/.settings
7 | **/.toolstarget
8 | **/.vs
9 | **/.vscode
10 | **/.idea
11 | **/*.*proj.user
12 | **/*.dbmdl
13 | **/*.jfm
14 | **/azds.yaml
15 | **/bin
16 | **/charts
17 | **/docker-compose*
18 | **/Dockerfile*
19 | **/node_modules
20 | **/npm-debug.log
21 | **/obj
22 | **/secrets.dev.yaml
23 | **/values.dev.yaml
24 | LICENSE
25 | README.md
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Ww][Ii][Nn]32/
27 | [Aa][Rr][Mm]/
28 | [Aa][Rr][Mm]64/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Ll]og/
33 | [Ll]ogs/
34 |
35 | # Visual Studio 2015/2017 cache/options directory
36 | .vs/
37 | # Uncomment if you have tasks that create the project's static files in wwwroot
38 | #wwwroot/
39 |
40 | # Visual Studio 2017 auto generated files
41 | Generated\ Files/
42 |
43 | # MSTest test Results
44 | [Tt]est[Rr]esult*/
45 | [Bb]uild[Ll]og.*
46 |
47 | # NUnit
48 | *.VisualState.xml
49 | TestResult.xml
50 | nunit-*.xml
51 |
52 | # Build Results of an ATL Project
53 | [Dd]ebugPS/
54 | [Rr]eleasePS/
55 | dlldata.c
56 |
57 | # Benchmark Results
58 | BenchmarkDotNet.Artifacts/
59 |
60 | # .NET
61 | project.lock.json
62 | project.fragment.lock.json
63 | artifacts/
64 |
65 | # Tye
66 | .tye/
67 |
68 | # ASP.NET Scaffolding
69 | ScaffoldingReadMe.txt
70 |
71 | # StyleCop
72 | StyleCopReport.xml
73 |
74 | # Files built by Visual Studio
75 | *_i.c
76 | *_p.c
77 | *_h.h
78 | *.ilk
79 | *.meta
80 | *.obj
81 | *.iobj
82 | *.pch
83 | *.pdb
84 | *.ipdb
85 | *.pgc
86 | *.pgd
87 | *.rsp
88 | *.sbr
89 | *.tlb
90 | *.tli
91 | *.tlh
92 | *.tmp
93 | *.tmp_proj
94 | *_wpftmp.csproj
95 | *.log
96 | *.tlog
97 | *.vspscc
98 | *.vssscc
99 | .builds
100 | *.pidb
101 | *.svclog
102 | *.scc
103 |
104 | # Chutzpah Test files
105 | _Chutzpah*
106 |
107 | # Visual C++ cache files
108 | ipch/
109 | *.aps
110 | *.ncb
111 | *.opendb
112 | *.opensdf
113 | *.sdf
114 | *.cachefile
115 | *.VC.db
116 | *.VC.VC.opendb
117 |
118 | # Visual Studio profiler
119 | *.psess
120 | *.vsp
121 | *.vspx
122 | *.sap
123 |
124 | # Visual Studio Trace Files
125 | *.e2e
126 |
127 | # TFS 2012 Local Workspace
128 | $tf/
129 |
130 | # Guidance Automation Toolkit
131 | *.gpState
132 |
133 | # ReSharper is a .NET coding add-in
134 | _ReSharper*/
135 | *.[Rr]e[Ss]harper
136 | *.DotSettings.user
137 |
138 | # TeamCity is a build add-in
139 | _TeamCity*
140 |
141 | # DotCover is a Code Coverage Tool
142 | *.dotCover
143 |
144 | # AxoCover is a Code Coverage Tool
145 | .axoCover/*
146 | !.axoCover/settings.json
147 |
148 | # Coverlet is a free, cross platform Code Coverage Tool
149 | coverage*.json
150 | coverage*.xml
151 | coverage*.info
152 |
153 | # Visual Studio code coverage results
154 | *.coverage
155 | *.coveragexml
156 |
157 | # NCrunch
158 | _NCrunch_*
159 | .*crunch*.local.xml
160 | nCrunchTemp_*
161 |
162 | # MightyMoose
163 | *.mm.*
164 | AutoTest.Net/
165 |
166 | # Web workbench (sass)
167 | .sass-cache/
168 |
169 | # Installshield output folder
170 | [Ee]xpress/
171 |
172 | # DocProject is a documentation generator add-in
173 | DocProject/buildhelp/
174 | DocProject/Help/*.HxT
175 | DocProject/Help/*.HxC
176 | DocProject/Help/*.hhc
177 | DocProject/Help/*.hhk
178 | DocProject/Help/*.hhp
179 | DocProject/Help/Html2
180 | DocProject/Help/html
181 |
182 | # Click-Once directory
183 | publish/
184 |
185 | # Publish Web Output
186 | *.[Pp]ublish.xml
187 | *.azurePubxml
188 | # Note: Comment the next line if you want to checkin your web deploy settings,
189 | # but database connection strings (with potential passwords) will be unencrypted
190 | *.pubxml
191 | *.publishproj
192 |
193 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
194 | # checkin your Azure Web App publish settings, but sensitive information contained
195 | # in these scripts will be unencrypted
196 | PublishScripts/
197 |
198 | # NuGet Packages
199 | *.nupkg
200 | # NuGet Symbol Packages
201 | *.snupkg
202 | # The packages folder can be ignored because of Package Restore
203 | **/[Pp]ackages/*
204 | # except build/, which is used as an MSBuild target.
205 | !**/[Pp]ackages/build/
206 | # Uncomment if necessary however generally it will be regenerated when needed
207 | #!**/[Pp]ackages/repositories.config
208 | # NuGet v3's project.json files produces more ignorable files
209 | *.nuget.props
210 | *.nuget.targets
211 |
212 | # Microsoft Azure Build Output
213 | csx/
214 | *.build.csdef
215 |
216 | # Microsoft Azure Emulator
217 | ecf/
218 | rcf/
219 |
220 | # Windows Store app package directories and files
221 | AppPackages/
222 | BundleArtifacts/
223 | Package.StoreAssociation.xml
224 | _pkginfo.txt
225 | *.appx
226 | *.appxbundle
227 | *.appxupload
228 |
229 | # Visual Studio cache files
230 | # files ending in .cache can be ignored
231 | *.[Cc]ache
232 | # but keep track of directories ending in .cache
233 | !?*.[Cc]ache/
234 |
235 | # Others
236 | ClientBin/
237 | ~$*
238 | *~
239 | *.dbmdl
240 | *.dbproj.schemaview
241 | *.jfm
242 | *.pfx
243 | *.publishsettings
244 | orleans.codegen.cs
245 |
246 | # Including strong name files can present a security risk
247 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
248 | #*.snk
249 |
250 | # Since there are multiple workflows, uncomment next line to ignore bower_components
251 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
252 | #bower_components/
253 |
254 | # RIA/Silverlight projects
255 | Generated_Code/
256 |
257 | # Backup & report files from converting an old project file
258 | # to a newer Visual Studio version. Backup files are not needed,
259 | # because we have git ;-)
260 | _UpgradeReport_Files/
261 | Backup*/
262 | UpgradeLog*.XML
263 | UpgradeLog*.htm
264 | ServiceFabricBackup/
265 | *.rptproj.bak
266 |
267 | # SQL Server files
268 | *.mdf
269 | *.ldf
270 | *.ndf
271 |
272 | # Business Intelligence projects
273 | *.rdl.data
274 | *.bim.layout
275 | *.bim_*.settings
276 | *.rptproj.rsuser
277 | *- [Bb]ackup.rdl
278 | *- [Bb]ackup ([0-9]).rdl
279 | *- [Bb]ackup ([0-9][0-9]).rdl
280 |
281 | # Microsoft Fakes
282 | FakesAssemblies/
283 |
284 | # GhostDoc plugin setting file
285 | *.GhostDoc.xml
286 |
287 | # Node.js Tools for Visual Studio
288 | .ntvs_analysis.dat
289 | node_modules/
290 |
291 | # Visual Studio 6 build log
292 | *.plg
293 |
294 | # Visual Studio 6 workspace options file
295 | *.opt
296 |
297 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
298 | *.vbw
299 |
300 | # Visual Studio 6 auto-generated project file (contains which files were open etc.)
301 | *.vbp
302 |
303 | # Visual Studio 6 workspace and project file (working project files containing files to include in project)
304 | *.dsw
305 | *.dsp
306 |
307 | # Visual Studio 6 technical files
308 | *.ncb
309 | *.aps
310 |
311 | # Visual Studio LightSwitch build output
312 | **/*.HTMLClient/GeneratedArtifacts
313 | **/*.DesktopClient/GeneratedArtifacts
314 | **/*.DesktopClient/ModelManifest.xml
315 | **/*.Server/GeneratedArtifacts
316 | **/*.Server/ModelManifest.xml
317 | _Pvt_Extensions
318 |
319 | # Paket dependency manager
320 | .paket/paket.exe
321 | paket-files/
322 |
323 | # FAKE - F# Make
324 | .fake/
325 |
326 | # CodeRush personal settings
327 | .cr/personal
328 |
329 | # Python Tools for Visual Studio (PTVS)
330 | __pycache__/
331 | *.pyc
332 |
333 | # Cake - Uncomment if you are using it
334 | # tools/**
335 | # !tools/packages.config
336 |
337 | # Tabs Studio
338 | *.tss
339 |
340 | # Telerik's JustMock configuration file
341 | *.jmconfig
342 |
343 | # BizTalk build output
344 | *.btp.cs
345 | *.btm.cs
346 | *.odx.cs
347 | *.xsd.cs
348 |
349 | # OpenCover UI analysis results
350 | OpenCover/
351 |
352 | # Azure Stream Analytics local run output
353 | ASALocalRun/
354 |
355 | # MSBuild Binary and Structured Log
356 | *.binlog
357 |
358 | # NVidia Nsight GPU debugger configuration file
359 | *.nvuser
360 |
361 | # MFractors (Xamarin productivity tool) working folder
362 | .mfractor/
363 |
364 | # Local History for Visual Studio
365 | .localhistory/
366 |
367 | # Visual Studio History (VSHistory) files
368 | .vshistory/
369 |
370 | # BeatPulse healthcheck temp database
371 | healthchecksdb
372 |
373 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
374 | MigrationBackup/
375 |
376 | # Ionide (cross platform F# VS Code tools) working folder
377 | .ionide/
378 |
379 | # Fody - auto-generated XML schema
380 | FodyWeavers.xsd
381 |
382 | # VS Code files for those working on multiple tools
383 | .vscode/*
384 | !.vscode/settings.json
385 | !.vscode/tasks.json
386 | !.vscode/launch.json
387 | !.vscode/extensions.json
388 | *.code-workspace
389 |
390 | # Local History for Visual Studio Code
391 | .history/
392 |
393 | # Windows Installer files from build outputs
394 | *.cab
395 | *.msi
396 | *.msix
397 | *.msm
398 | *.msp
399 |
400 | # JetBrains Rider
401 | *.sln.iml
402 |
403 | ##
404 | ## Visual studio for Mac
405 | ##
406 |
407 |
408 | # globs
409 | Makefile.in
410 | *.userprefs
411 | *.usertasks
412 | config.make
413 | config.status
414 | aclocal.m4
415 | install-sh
416 | autom4te.cache/
417 | *.tar.gz
418 | tarballs/
419 | test-results/
420 |
421 | # Mac bundle stuff
422 | *.dmg
423 | *.app
424 |
425 | # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
426 | # General
427 | .DS_Store
428 | .AppleDouble
429 | .LSOverride
430 |
431 | # Icon must end with two \r
432 | Icon
433 |
434 |
435 | # Thumbnails
436 | ._*
437 |
438 | # Files that might appear in the root of a volume
439 | .DocumentRevisions-V100
440 | .fseventsd
441 | .Spotlight-V100
442 | .TemporaryItems
443 | .Trashes
444 | .VolumeIcon.icns
445 | .com.apple.timemachine.donotpresent
446 |
447 | # Directories potentially created on remote AFP share
448 | .AppleDB
449 | .AppleDesktop
450 | Network Trash Folder
451 | Temporary Items
452 | .apdisk
453 |
454 | # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
455 | # Windows thumbnail cache files
456 | Thumbs.db
457 | ehthumbs.db
458 | ehthumbs_vista.db
459 |
460 | # Dump file
461 | *.stackdump
462 |
463 | # Folder config file
464 | [Dd]esktop.ini
465 |
466 | # Recycle Bin used on file shares
467 | $RECYCLE.BIN/
468 |
469 | # Windows Installer files
470 | *.cab
471 | *.msi
472 | *.msix
473 | *.msm
474 | *.msp
475 |
476 | # Windows shortcuts
477 | *.lnk
478 |
--------------------------------------------------------------------------------
/.idea/.idea.WebComponents/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Rider ignored files
5 | /contentModel.xml
6 | /.idea.WebComponents.iml
7 | /modules.xml
8 | /projectSettingsUpdater.xml
9 | # Editor-based HTTP Client requests
10 | /httpRequests/
11 | # Datasource local storage ignored files
12 | /dataSources/
13 | /dataSources.local.xml
14 |
--------------------------------------------------------------------------------
/.idea/.idea.WebComponents/.idea/.name:
--------------------------------------------------------------------------------
1 | WebComponents
--------------------------------------------------------------------------------
/.idea/.idea.WebComponents/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/.idea.WebComponents/.idea/indexLayout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/.idea.WebComponents/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/.idea.WebComponents/.idea/jsLibraryMappings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/.idea.WebComponents/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/.idea.WebComponents/.idea/watcherTasks.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 | Copyright (c) 2023 Khalid Abuhakmeh
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 | The above copyright notice and this permission notice shall be included in all
10 | copies or substantial portions of the Software.
11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17 | SOFTWARE.
18 |
--------------------------------------------------------------------------------
/WebComponents.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebComponents", "WebComponents\WebComponents.csproj", "{E2B057EC-F869-462A-837D-608C43730381}"
4 | EndProject
5 | Global
6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
7 | Debug|Any CPU = Debug|Any CPU
8 | Release|Any CPU = Release|Any CPU
9 | EndGlobalSection
10 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
11 | {E2B057EC-F869-462A-837D-608C43730381}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
12 | {E2B057EC-F869-462A-837D-608C43730381}.Debug|Any CPU.Build.0 = Debug|Any CPU
13 | {E2B057EC-F869-462A-837D-608C43730381}.Release|Any CPU.ActiveCfg = Release|Any CPU
14 | {E2B057EC-F869-462A-837D-608C43730381}.Release|Any CPU.Build.0 = Release|Any CPU
15 | EndGlobalSection
16 | EndGlobal
17 |
--------------------------------------------------------------------------------
/WebComponents/Client/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/WebComponents/Client/main.ts:
--------------------------------------------------------------------------------
1 | import "bootstrap/dist/js/bootstrap.bundle.min.js";
2 | import "jquery";
3 | import "jquery-validation";
4 | import "jquery-validation-unobtrusive";
5 |
6 | // style
7 | import "./scss/site.scss";
8 |
9 | // VITE import all Lit components
10 | import.meta.glob(
11 | './src/**/*',
12 | { eager: true }
13 | )
--------------------------------------------------------------------------------
/WebComponents/Client/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/khalidabuhakmeh/AspNetCoreLitWebComponents/6186beac0571b7517e200e08861631e1ea0f8be5/WebComponents/Client/public/favicon.ico
--------------------------------------------------------------------------------
/WebComponents/Client/scss/site.scss:
--------------------------------------------------------------------------------
1 | @import "bootstrap/dist/css/bootstrap.css";
2 |
3 | html {
4 | font-size: 16px;
5 | }
6 |
7 | @media (min-width: 768px) {
8 | html {
9 | font-size: 16px;
10 | }
11 | }
12 |
13 | .btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
14 | box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
15 | }
16 |
17 | html {
18 | position: relative;
19 | min-height: 100%;
20 | }
21 |
22 | body {
23 | margin-bottom: 20px;
24 | }
25 |
26 | footer {
27 | padding-top: 10px;
28 | }
--------------------------------------------------------------------------------
/WebComponents/Client/src/BaseElement.ts:
--------------------------------------------------------------------------------
1 | import {LitElement, unsafeCSS} from 'lit';
2 | import bootstrap from "bootstrap/dist/css/bootstrap.css?inline"
3 |
4 | export class BaseElement extends LitElement {
5 | // use Bootstrap styling for components
6 | static styles = unsafeCSS(bootstrap);
7 | }
--------------------------------------------------------------------------------
/WebComponents/Client/src/Counter.ts:
--------------------------------------------------------------------------------
1 | import {html} from 'lit';
2 | import {customElement, property} from 'lit/decorators.js';
3 | import {BaseElement} from "./BaseElement";
4 | @customElement("my-counter")
5 | export class Counter extends BaseElement {
6 | constructor() {
7 | super();
8 | this.count = 0;
9 | }
10 | @property()
11 | count = 0;
12 | increment() {
13 | this.count++;
14 | }
15 | render() {
16 | return html`
17 |
Counter
18 | Current count: ${this.count}
19 | Click me
20 | `
21 | }
22 | }
--------------------------------------------------------------------------------
/WebComponents/Client/src/FetchData.ts:
--------------------------------------------------------------------------------
1 | import {html} from 'lit';
2 | import {customElement, property} from 'lit/decorators.js';
3 | import {BaseElement} from "./BaseElement";
4 |
5 | @customElement("fetch-data")
6 | export class FetchData extends BaseElement {
7 | constructor(apiUrl: string) {
8 | super();
9 | this.url = apiUrl;
10 | this.forecasts = [];
11 | }
12 |
13 | @property()
14 | url: string;
15 |
16 | @property()
17 | forecasts: Forecast[];
18 |
19 | async firstUpdated() {
20 | const response = await fetch(this.url);
21 | this.forecasts = await response.json() as Forecast[];
22 | }
23 |
24 | render() {
25 | return html`
26 | Weather Forecasts
27 |
28 |
29 |
30 | Date
31 | Temp. (C)
32 | Temp. (F)
33 | Summary
34 |
35 |
36 |
37 | ${this.forecasts.map((forecast) =>
38 | html`
39 |
40 | ${forecast.date}
41 | ${forecast.temperatureC}
42 | ${forecast.temperatureF}
43 | ${forecast.summary}
44 | `
45 | )}
46 |
47 |
48 | `
49 | }
50 | }
51 |
52 | type Forecast = {
53 | date: Date,
54 | temperatureC: number,
55 | temperatureF: number,
56 | summary: string
57 | }
--------------------------------------------------------------------------------
/WebComponents/Client/src/RandomImage.ts:
--------------------------------------------------------------------------------
1 | import {html} from 'lit';
2 | import {customElement, property} from 'lit/decorators.js';
3 | import {BaseElement} from "./BaseElement";
4 |
5 | @customElement("random-image")
6 | export class RandomImage extends BaseElement {
7 | constructor() {
8 | super();
9 | }
10 |
11 | @property()
12 | imageSrc?: string = `https://source.unsplash.com/random?${new Date().toISOString()}`;
13 |
14 | async random() {
15 | this.imageSrc = `https://source.unsplash.com/random?${new Date().toISOString()}`;
16 | }
17 |
18 | button() {
19 | return html`
20 |
21 | Get Random Image
22 | `
23 | }
24 |
25 | displayImage() {
26 | return html`
27 |
28 |
32 |
33 | Unsplash random image (${new Date().toLocaleTimeString()})
34 |
35 |
36 | `;
37 | }
38 |
39 | render() {
40 | return html`
41 |
42 |
43 | ${this.button()}
44 |
45 |
46 |
47 | ${this.displayImage()}
48 |
49 |
50 | `
51 | }
52 | }
--------------------------------------------------------------------------------
/WebComponents/Client/types/Client/main.d.ts:
--------------------------------------------------------------------------------
1 | import "bootstrap/dist/js/bootstrap.bundle.min.js";
2 | import "jquery";
3 | import "jquery-validation";
4 | import "jquery-validation-unobtrusive";
5 | import "./scss/site.scss";
6 |
--------------------------------------------------------------------------------
/WebComponents/Client/types/Client/src/BaseElement.d.ts:
--------------------------------------------------------------------------------
1 | import { LitElement } from 'lit';
2 | export declare class BaseElement extends LitElement {
3 | static styles: import("lit").CSSResult;
4 | }
5 |
--------------------------------------------------------------------------------
/WebComponents/Client/types/Client/src/Counter.d.ts:
--------------------------------------------------------------------------------
1 | import { BaseElement } from "./BaseElement";
2 | export declare class Counter extends BaseElement {
3 | constructor();
4 | count: number;
5 | increment(): void;
6 | render(): import("lit-html").TemplateResult<1>;
7 | }
8 |
--------------------------------------------------------------------------------
/WebComponents/Client/types/Client/src/FetchData.d.ts:
--------------------------------------------------------------------------------
1 | import { BaseElement } from "./BaseElement";
2 | export declare class FetchData extends BaseElement {
3 | constructor(apiUrl: string);
4 | url: string;
5 | forecasts: Forecast[];
6 | firstUpdated(): Promise;
7 | render(): import("lit-html").TemplateResult<1>;
8 | }
9 | type Forecast = {
10 | date: Date;
11 | temperatureC: number;
12 | temperatureF: number;
13 | summary: string;
14 | };
15 | export {};
16 |
--------------------------------------------------------------------------------
/WebComponents/Client/types/tsconfig.tsbuildinfo:
--------------------------------------------------------------------------------
1 | {"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/globals.global.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/esbuild/lib/main.d.ts","../../node_modules/vite/types/metadata.d.ts","../../node_modules/vite/types/hmrpayload.d.ts","../../node_modules/vite/types/customevent.d.ts","../../node_modules/rollup/dist/rollup.d.ts","../../node_modules/vite/types/importglob.d.ts","../../node_modules/source-map-js/source-map.d.ts","../../node_modules/postcss/lib/comment.d.ts","../../node_modules/postcss/lib/at-rule.d.ts","../../node_modules/postcss/lib/rule.d.ts","../../node_modules/postcss/lib/container.d.ts","../../node_modules/postcss/lib/declaration.d.ts","../../node_modules/postcss/lib/previous-map.d.ts","../../node_modules/postcss/lib/input.d.ts","../../node_modules/postcss/lib/css-syntax-error.d.ts","../../node_modules/postcss/lib/warning.d.ts","../../node_modules/postcss/lib/document.d.ts","../../node_modules/postcss/lib/root.d.ts","../../node_modules/postcss/lib/lazy-result.d.ts","../../node_modules/postcss/lib/no-work-result.d.ts","../../node_modules/postcss/lib/processor.d.ts","../../node_modules/postcss/lib/result.d.ts","../../node_modules/postcss/lib/node.d.ts","../../node_modules/postcss/lib/list.d.ts","../../node_modules/postcss/lib/postcss.d.ts","../../node_modules/vite/dist/node/index.d.ts","../../vite.config.ts","../main.ts","../node_modules/vite/types/customevent.d.ts","../node_modules/vite/types/hot.d.ts","../node_modules/vite/types/importglob.d.ts","../node_modules/vite/types/importmeta.d.ts","../node_modules/vite/client.d.ts","../vite-env.d.ts","../node_modules/@lit/reactive-element/css-tag.d.ts","../node_modules/@lit/reactive-element/reactive-controller.d.ts","../node_modules/@lit/reactive-element/reactive-element.d.ts","../node_modules/@types/trusted-types/lib/index.d.ts","../node_modules/@types/trusted-types/index.d.ts","../node_modules/lit-html/directive.d.ts","../node_modules/lit-html/lit-html.d.ts","../node_modules/lit-element/lit-element.d.ts","../node_modules/lit-html/is-server.d.ts","../node_modules/lit/index.d.ts","../src/baseelement.ts","../node_modules/@lit/reactive-element/decorators/base.d.ts","../node_modules/@lit/reactive-element/decorators/custom-element.d.ts","../node_modules/@lit/reactive-element/decorators/property.d.ts","../node_modules/@lit/reactive-element/decorators/state.d.ts","../node_modules/@lit/reactive-element/decorators/event-options.d.ts","../node_modules/@lit/reactive-element/decorators/query.d.ts","../node_modules/@lit/reactive-element/decorators/query-all.d.ts","../node_modules/@lit/reactive-element/decorators/query-async.d.ts","../node_modules/@lit/reactive-element/decorators/query-assigned-nodes.d.ts","../node_modules/@lit/reactive-element/decorators/query-assigned-elements.d.ts","../node_modules/lit/decorators.d.ts","../src/counter.ts","../src/fetchdata.ts"],"fileInfos":[{"version":"6a6b471e7e43e15ef6f8fe617a22ce4ecb0e34efa6c3dfcfe7cebd392bcca9d2","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"fcd3ecc9f764f06f4d5c467677f4f117f6abf49dee6716283aa204ff1162498b","affectsGlobalScope":true},{"version":"9a60b92bca4c1257db03b349d58e63e4868cfc0d1c8d0ba60c2dbc63f4e6c9f6","affectsGlobalScope":true},{"version":"f296963760430fb65b4e5d91f0ed770a91c6e77455bacf8fa23a1501654ede0e","affectsGlobalScope":true},{"version":"5114a95689b63f96b957e00216bc04baf9e1a1782aa4d8ee7e5e9acbf768e301","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"b7e9f95a7387e3f66be0ed6db43600c49cec33a3900437ce2fd350d9b7cb16f2","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"57b6cb95756d1fe3bfeb20205de27b0c5406e4a86e130c6dfa6bd92af641e09d","affectsGlobalScope":true},"11e2d554398d2bd460e7d06b2fa5827a297c8acfbe00b4f894a224ac0862857f",{"version":"e193e634a99c9c1d71f1c6e4e1567a4a73584328d21ea02dd5cddbaad6693f61","affectsGlobalScope":true},"374ca798f244e464346f14301dc2a8b4b111af1a83b49fffef5906c338a1f922","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","e596c9bb2f29a2699fdd4ae89139612652245192f67f45617c5a4b20832aaae9","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","1cdcfc1f624d6c08aa12c73935f6e13f095919cd99edf95752951796eb225729","216717f17c095cde1dc19375e1ab3af0a4a485355860c077a4f9d6ea59fab5b5","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"80473bd0dd90ca1e166514c2dfead9d5803f9c51418864ca35abbeec6e6847e1","1c84b46267610a34028edfd0d035509341751262bac1062857f3c8df7aff7153","e6c86d83bd526c8bdb5d0bf935b8e72ce983763d600743f74d812fdf4abf4df6","a3d541d303ee505053f5dcbf9fafb65cac3d5631037501cd616195863a6c5740","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true},"bcebb922784739bdb34c18ee51095d25a92b560c78ccd2eaacd6bd00f7443d83","7ee6ed878c4528215c82b664fe0cfe80e8b4da6c0d4cc80869367868774db8b1","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"0715e4cd28ad471b2a93f3e552ff51a3ae423417a01a10aa1d3bc7c6b95059d6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","7d55d78cd47cf5280643b53434b16c2d9d11d144126932759fbdd51da525eec4","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","f69ff39996a61a0dd10f4bce73272b52e8024a4d58b13ab32bf4712909d0a2b7",{"version":"3c4ba1dd9b12ffa284b565063108f2f031d150ea15b8fafbdc17f5d2a07251f3","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","c4577fb855ca259bdbf3ea663ca73988ce5f84251a92b4aef80a1f4122b6f98e","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"ff07a9a03c65732ccc59b3c65bc584173da093bd563a6565411c01f5703bd3cb","affectsGlobalScope":true},"6de4a219df57d2b27274d59b67708f13c2cbf7ed211abe57d8f9ab8b25cde776","0fe8985a28f82c450a04a6edf1279d7181c0893f37da7d2a27f8efd4fd5edb03","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"d8d555f3d607ecaa18d55de6995ea8f206342ecc93305919eac945c7c78c78c6","99d951629f7096dcd79adbaa83a85e3be57613005533bd23029b3aba4ce9383e","8f07f2b6514744ac96e51d7cb8518c0f4de319471237ea10cf688b8d0e9d0225","bcb6ea18f23dae2c48459d7b86d3adccd6898f824fcbf9da08b935f559896580","0aa7220845f5f3902fe043f646f9d9218bd7dd6c4046e8471580866ea6b03aa2","8bff1a31f450aeb1dc454de28fa419ea8c15831bbc8469832ea6f609b9999ed4","739c2c46edc112421fc023c24b4898b1f413f792bb6a02b40ba182c648e56c2f","858d0d831826c6eb563df02f7db71c90e26deadd0938652096bea3cc14899700","d1c89db652113258e4ba4bbdf5cc7a2a3a600403d4d864a2087b95186253cd5b","11a90d2cb2eaf7fdf931a63b58279e8161f1477a1bd1e914ae026c1bbf9afed3","af18e30f3ba06e9870b61dfa4a109215caabdaa337590c51b4a044a9f338ce96","ace603f7b60599f2dcdbd71c07137b60a747dd33be540f4a294b890f9e0b89dc","7658fbdd425c656fb1849b44932ae7431e8c3198d22c65ce1490deb582743b52","7786c75c1b46e93b33c63dccf689143a5f47ff451a6b3bd9b10e4801cdeadcc2","dbef2851e33a4c2fd2f3164fec70e45df647eb0e87f250de784500a3037e2c37","31491a01ed7466e0b3b0ef8407f2524683055eceb955b1d5ccf7096129468b39","f4b12f7dde4fc0e386648318481bdcfe861b566be246bebf0e8a11ebd909adf9","e8966f7c424780bb0b9d411ebe13eda8555ca15aa675603316c2952bc027b0e3","df0e5f3c4a518111d160cf3bebc9a3ac7d39c6e3bfb7a21d43c304896c3015e2","df4e2f161f74870708c2cc5e1036a6405b878496408fda1ee50d5b10e50d6601","bf791da347fb1c0ffc1e2fcd35867e64bb8355270ae26278198c521bdcf94569","e0e0e3c068e145fbb322120979299ff130ffdd39f0dcd0d5aeaa9f3f8a0d01d9","fde91356172e35b9ea68bbdf33721f7c80307a4ce65b82105eac800e9e744995","9bd5e5a4a1e66b35efe3c48ddac1116537ef86e041717f3a9b9f1e060c74efa6","d7e4a5f4ccfb749c3033fafc233073b4d1dcca0249785186c589602a81f9d86f","68161b6f3004fc10f8bb47a4986cef13c3b0728fb1ca3e1dc7316227d09b2c8d","664dfac4ee0a3c231a5155dd5e45a7b893a96d5cac6b36a0c6d3e51229be2aff",{"version":"776b3f08ee11b9b1e4cbf84e74687cfc063899fde041ef3414d82849b8e96f7b","signature":"b7fd7842dd781efad8c2b15df61a1a23d44356a724eec5a5b5213bd4c9e5f15f"},{"version":"bf820f52ce91c75d983b392b668d5113484af49e554ce89025a5e12743dde665","signature":"bad81e478b1790acf7e5197f52f011e72c797f405208120ed59257fe16d62da8"},"0aa7220845f5f3902fe043f646f9d9218bd7dd6c4046e8471580866ea6b03aa2","4d5fb5d6b35f731b2ae4d9d7c592d48e91d6de531dd130628edf4eba16add893","739c2c46edc112421fc023c24b4898b1f413f792bb6a02b40ba182c648e56c2f",{"version":"df93bb67d5ae7be3d599323de42e12cb8da59f0b490c3186ae91d493632b5e36","affectsGlobalScope":true},{"version":"318816142496b1ab2122472d06e7679787b0d0c3d189ad671213bdc1f2531f94","affectsGlobalScope":true},"b440b802c2cfeac6a24eda510bd63c1f23c6ab5c52bcfe3a32a918dbad6b46c8","e59262ddaae67dec2d226f8a5d05cf6c4dc353c0d9b1e4980a61d7fcf9a2b051","5e30131b6a5587fe666926ad1d9807e733c0a597ed12d682669fcaa331aea576","d27ead0e913b4225279e8beb10450ecaf54af5ed145a6ecbbed18bb130815006","2fcd2d22b1f30555e785105597cd8f57ed50300e213c4f1bbca6ae149f782c38",{"version":"3c150a2e1758724811db3bdc5c773421819343b1627714e09f29b1f40a5dfb26","affectsGlobalScope":true},"7000ec8572390d035ba5ef993953957150d0c38ffb31b56653c97dd78cb6e1aa","5a4af5e4727864a08625d5c892d7cba8916d205c7f0c68e15eda5d6579968497","4ddf3962990379d1ea59b369a5516c7533b7944010d6998e0e9b1ab35d5af1f0","1bcd560deed90a43c51b08aa18f7f55229f2e30974ab5ed1b7bb5721be379013","dc08fe04e50bc24d1baded4f33e942222bbdd5d77d6341a93cfe6e4e4586a3be",{"version":"1e8b6dae6fac52b1f12028c6d4673b7ee954394beab2f296ab11c5f2701f0f3f","signature":"c2e86db9f41add26bd40e1bc54195e89d53e0736d6f08d8bc2bb5ed7618d429b"},"4b8e8a20b14b5ae700743222a80ab3dcb44822d269b29a7779fe25fe1f0f87a3","d08415b3d6d7fd153ba6e7bf7707ffc57f3c6ad85730ea63544756610b4350c6","411f23da7a63c3d3fd4860c41a458e8df239776fd5d9cd36dd3ad6be92afccbd","6ada3e065916c0ef2dbc9bc0f9b5d59afb25d9176f81fa2c8993a536924140c6","938dd6c2b518b1ae8598db5e2bc7db03be0c6a774c4cb846ca92b51bb353e019","d36d25c50d6bff81a153e87b70c07285955fba8a9d317c453dc74aad826e8cbb","effe65dcf890703716bead4f38170fcbe769cb49e8c8260c11b8c402cac443e1","0848a16732172391d2d0210f754b66ac925cd7c1b501ad8e4fd405e6ade688a8","bbe13c947d7d6c3426e0e5815e2b3464fa03d34a4bf47298c43b9237cf59555b","e8265198b29dccb14667214f65f77c5e4744a8797f75d96bcf8b150b23a56705","a8992b852521a66f63e0cedc6e1f054b28f972232b6fa5ca59771db6a1c8bbea",{"version":"da113ce30287eb124afbb6b7923837b229d83c111851252ffc7837ded6af79fd","signature":"63e7d96b158cc3356861f864673e0224732c0a5253b30f5bd6dc454810e3763c"},{"version":"7a2d2dc9bcd7f6d3bd84cdb66cc4a9bfca7c1347fca9c23dda85ac7b46a5ce4a","signature":"952b759fbf5ec8f1c9a81a9166bd910cf45037d127a0dfff015241ad2e6532e1"}],"root":[126,127,133,144,156,157],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"emitDeclarationOnly":true,"experimentalDecorators":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"useDefineForClassFields":false},"fileIdsList":[[92,132],[92],[92,136],[92,145],[92,136,145],[92,136,145,153],[92,134,135],[92,137],[92,136,140],[92,140],[92,138,139],[92,146,147,148,149,150,151,152,153,154],[92,136,140,141,142],[92,131],[92,102],[92,103],[92,105,129],[92,132,143],[92,143,144,155],[46,92],[49,92],[50,55,83,92],[51,62,63,70,80,91,92],[51,52,62,70,92],[53,92],[54,55,63,71,92],[55,80,88,92],[56,58,62,70,92],[57,92],[58,59,92],[62,92],[60,62,92],[62,63,64,80,91,92],[62,63,64,77,80,83,92],[92,96],[58,65,70,80,91,92],[62,63,65,66,70,80,88,91,92],[65,67,80,88,91,92],[46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],[62,68,92],[69,91,92],[58,62,70,80,92],[71,92],[72,92],[49,73,92],[74,90,92,96],[75,92],[76,92],[62,77,78,92],[77,79,92,94],[50,62,80,81,82,83,92],[50,80,82,92],[80,81,92],[83,92],[84,92],[62,86,87,92],[86,87,92],[55,70,80,88,92],[89,92],[70,90,92],[50,65,76,91,92],[55,92],[80,92,93],[92,94],[92,95],[50,55,62,64,73,80,91,92,94,96],[80,92,97],[92,110],[92,110,122],[92,107,108,109,111,122],[92,113],[92,110,117,121,124],[92,112,124],[92,115,117,120,121,124],[92,115,117,118,120,121,124],[92,107,108,109,110,111,113,114,115,116,117,121,124],[92,106,107,108,109,110,111,113,114,115,116,117,118,120,121,122,123],[92,106,124],[92,117,118,119,121,124],[92,120,124],[92,110,116,121,124],[92,114,122],[92,106],[62,63,65,67,70,80,88,91,92,97,99,100,101,102,103,104,105,124],[92,104],[51,63,72,74,92,125],[132],[143],[140,144],[125]],"referencedMap":[[127,1],[134,2],[145,3],[146,4],[149,5],[147,5],[151,5],[154,6],[153,2],[152,5],[150,5],[148,4],[135,2],[136,7],[138,8],[137,2],[141,9],[139,10],[142,2],[140,11],[155,12],[143,13],[132,14],[128,15],[129,16],[130,2],[131,17],[144,18],[156,19],[157,19],[133,1],[46,20],[47,20],[49,21],[50,22],[51,23],[52,24],[53,25],[54,26],[55,27],[56,28],[57,29],[58,30],[59,30],[61,31],[60,32],[62,31],[63,33],[64,34],[48,35],[98,2],[65,36],[66,37],[67,38],[99,39],[68,40],[69,41],[70,42],[71,43],[72,44],[73,45],[74,46],[75,47],[76,48],[77,49],[78,49],[79,50],[80,51],[82,52],[81,53],[83,54],[84,55],[85,2],[86,56],[87,57],[88,58],[89,59],[90,60],[91,61],[92,62],[93,63],[94,64],[95,65],[96,66],[97,67],[100,2],[108,68],[107,69],[110,70],[114,71],[111,69],[116,72],[113,73],[118,74],[123,2],[119,75],[122,76],[124,77],[112,78],[120,79],[121,80],[117,81],[109,68],[115,82],[104,2],[106,83],[44,2],[45,2],[8,2],[9,2],[11,2],[10,2],[2,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[3,2],[4,2],[23,2],[20,2],[21,2],[22,2],[24,2],[25,2],[26,2],[5,2],[27,2],[28,2],[29,2],[30,2],[6,2],[34,2],[31,2],[32,2],[33,2],[35,2],[7,2],[36,2],[41,2],[42,2],[37,2],[38,2],[39,2],[40,2],[1,2],[43,2],[125,84],[103,15],[102,2],[105,2],[101,85],[126,86]],"exportedModulesMap":[[127,87],[134,2],[145,3],[146,4],[149,5],[147,5],[151,5],[154,6],[153,2],[152,5],[150,5],[148,4],[135,2],[136,7],[138,8],[137,2],[141,9],[139,10],[142,2],[140,11],[155,12],[143,13],[132,14],[128,15],[129,16],[130,2],[131,17],[144,88],[156,89],[157,89],[133,1],[46,20],[47,20],[49,21],[50,22],[51,23],[52,24],[53,25],[54,26],[55,27],[56,28],[57,29],[58,30],[59,30],[61,31],[60,32],[62,31],[63,33],[64,34],[48,35],[98,2],[65,36],[66,37],[67,38],[99,39],[68,40],[69,41],[70,42],[71,43],[72,44],[73,45],[74,46],[75,47],[76,48],[77,49],[78,49],[79,50],[80,51],[82,52],[81,53],[83,54],[84,55],[85,2],[86,56],[87,57],[88,58],[89,59],[90,60],[91,61],[92,62],[93,63],[94,64],[95,65],[96,66],[97,67],[100,2],[108,68],[107,69],[110,70],[114,71],[111,69],[116,72],[113,73],[118,74],[123,2],[119,75],[122,76],[124,77],[112,78],[120,79],[121,80],[117,81],[109,68],[115,82],[104,2],[106,83],[44,2],[45,2],[8,2],[9,2],[11,2],[10,2],[2,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[3,2],[4,2],[23,2],[20,2],[21,2],[22,2],[24,2],[25,2],[26,2],[5,2],[27,2],[28,2],[29,2],[30,2],[6,2],[34,2],[31,2],[32,2],[33,2],[35,2],[7,2],[36,2],[41,2],[42,2],[37,2],[38,2],[39,2],[40,2],[1,2],[43,2],[125,84],[103,15],[102,2],[105,2],[101,85],[126,90]],"semanticDiagnosticsPerFile":[127,134,145,146,149,147,151,154,153,152,150,148,135,136,138,137,141,139,142,140,155,143,132,128,129,130,131,144,156,157,133,46,47,49,50,51,52,53,54,55,56,57,58,59,61,60,62,63,64,48,98,65,66,67,99,68,69,70,71,72,73,74,75,76,77,78,79,80,82,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,100,108,107,110,114,111,116,113,118,123,119,122,124,112,120,121,117,109,115,104,106,44,45,8,9,11,10,2,12,13,14,15,16,17,18,19,3,4,23,20,21,22,24,25,26,5,27,28,29,30,6,34,31,32,33,35,7,36,41,42,37,38,39,40,1,43,125,103,102,105,101,126],"latestChangedDtsFile":"./Client/main.d.ts"},"version":"5.0.4"}
--------------------------------------------------------------------------------
/WebComponents/Client/types/vite.config.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Name: vite.config.ts
3 | * Description: Vite configuration file
4 | */
5 | declare const _default: import("vite").UserConfigExport;
6 | export default _default;
7 |
--------------------------------------------------------------------------------
/WebComponents/Client/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
--------------------------------------------------------------------------------
/WebComponents/Controllers/WeatherForecastController.cs:
--------------------------------------------------------------------------------
1 | using BlazorApp1.Data;
2 | using Microsoft.AspNetCore.Mvc;
3 |
4 | namespace WebComponents.Controllers;
5 |
6 | public class WeatherForecastController : Controller
7 | {
8 | private static readonly string[] Summaries = {
9 | "Freezing", "Bracing", "Chilly", "Cool",
10 | "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
11 | };
12 |
13 | [HttpGet, Route("forecasts")]
14 | public ActionResult Get(DateOnly? startDate = null)
15 | {
16 | var now = DateTime.Now;
17 | startDate ??= new DateOnly(now.Year, now.Month, now.Day);
18 |
19 | return Ok(Enumerable.Range(1, 5).Select(index => new WeatherForecast
20 | {
21 | Date = startDate.Value.AddDays(index),
22 | TemperatureC = Random.Shared.Next(-20, 55),
23 | Summary = Summaries[Random.Shared.Next(Summaries.Length)]
24 | }).ToArray());
25 | }
26 | }
--------------------------------------------------------------------------------
/WebComponents/Data/WeatherForecast.cs:
--------------------------------------------------------------------------------
1 | namespace BlazorApp1.Data;
2 |
3 | public class WeatherForecast
4 | {
5 | public DateOnly Date { get; set; }
6 |
7 | public int TemperatureC { get; set; }
8 |
9 | public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
10 |
11 | public string? Summary { get; set; }
12 | }
--------------------------------------------------------------------------------
/WebComponents/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
2 | WORKDIR /app
3 | EXPOSE 80
4 | EXPOSE 443
5 |
6 | FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
7 | WORKDIR /src
8 | COPY ["WebComponents/WebComponents.csproj", "WebComponents/"]
9 | RUN dotnet restore "WebComponents/WebComponents.csproj"
10 | COPY . .
11 | WORKDIR "/src/WebComponents"
12 | RUN dotnet build "WebComponents.csproj" -c Release -o /app/build
13 |
14 | FROM build AS publish
15 | RUN dotnet publish "WebComponents.csproj" -c Release -o /app/publish /p:UseAppHost=false
16 |
17 | FROM base AS final
18 | WORKDIR /app
19 | COPY --from=publish /app/publish .
20 | ENTRYPOINT ["dotnet", "WebComponents.dll"]
21 |
--------------------------------------------------------------------------------
/WebComponents/Pages/Error.cshtml:
--------------------------------------------------------------------------------
1 | @page
2 | @model ErrorModel
3 | @{
4 | ViewData["Title"] = "Error";
5 | }
6 |
7 | Error.
8 | An error occurred while processing your request.
9 |
10 | @if (Model.ShowRequestId)
11 | {
12 |
13 | Request ID: @Model.RequestId
14 |
15 | }
16 |
17 | Development Mode
18 |
19 | Swapping to the Development environment displays detailed information about the error that occurred.
20 |
21 |
22 | The Development environment shouldn't be enabled for deployed applications.
23 | It can result in displaying sensitive information from exceptions to end users.
24 | For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development
25 | and restarting the app.
26 |
--------------------------------------------------------------------------------
/WebComponents/Pages/Error.cshtml.cs:
--------------------------------------------------------------------------------
1 | using System.Diagnostics;
2 | using Microsoft.AspNetCore.Mvc;
3 | using Microsoft.AspNetCore.Mvc.RazorPages;
4 |
5 | namespace WebComponents.Pages;
6 |
7 | [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
8 | [IgnoreAntiforgeryToken]
9 | public class ErrorModel : PageModel
10 | {
11 | public string? RequestId { get; set; }
12 |
13 | public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
14 |
15 | private readonly ILogger _logger;
16 |
17 | public ErrorModel(ILogger logger)
18 | {
19 | _logger = logger;
20 | }
21 |
22 | public void OnGet()
23 | {
24 | RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
25 | }
26 | }
--------------------------------------------------------------------------------
/WebComponents/Pages/Index.cshtml:
--------------------------------------------------------------------------------
1 | @page
2 | @model IndexModel
3 | @{
4 | ViewData["Title"] = "Home page";
5 | }
6 |
7 |
8 |
Welcome
9 |
Learn about building Web apps with ASP.NET Core .
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/WebComponents/Pages/Index.cshtml.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.AspNetCore.Mvc;
2 | using Microsoft.AspNetCore.Mvc.RazorPages;
3 |
4 | namespace WebComponents.Pages;
5 |
6 | public class IndexModel : PageModel
7 | {
8 | private readonly ILogger _logger;
9 |
10 | public IndexModel(ILogger logger)
11 | {
12 | _logger = logger;
13 | }
14 |
15 | public void OnGet()
16 | {
17 | }
18 | }
--------------------------------------------------------------------------------
/WebComponents/Pages/Privacy.cshtml:
--------------------------------------------------------------------------------
1 | @page
2 | @model PrivacyModel
3 | @{
4 | ViewData["Title"] = "Privacy Policy";
5 | }
6 | @ViewData["Title"]
7 |
8 | Use this page to detail your site's privacy policy.
--------------------------------------------------------------------------------
/WebComponents/Pages/Privacy.cshtml.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.AspNetCore.Mvc;
2 | using Microsoft.AspNetCore.Mvc.RazorPages;
3 |
4 | namespace WebComponents.Pages;
5 |
6 | public class PrivacyModel : PageModel
7 | {
8 | private readonly ILogger _logger;
9 |
10 | public PrivacyModel(ILogger logger)
11 | {
12 | _logger = logger;
13 | }
14 |
15 | public void OnGet()
16 | {
17 | }
18 | }
--------------------------------------------------------------------------------
/WebComponents/Pages/Shared/_Layout.cshtml:
--------------------------------------------------------------------------------
1 | @using Microsoft.AspNetCore.Mvc.TagHelpers
2 | @using Vite.AspNetCore.Abstractions
3 | @inject IViteManifest Manifest
4 |
5 |
6 |
7 |
8 |
9 | @ViewData["Title"] - WebComponents
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
42 |
43 |
44 | @RenderBody()
45 |
46 |
47 |
48 |
53 |
54 | @await RenderSectionAsync("Scripts", required: false)
55 |
56 |
--------------------------------------------------------------------------------
/WebComponents/Pages/Shared/_Layout.cshtml.css:
--------------------------------------------------------------------------------
1 | /* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
2 | for details on configuring this project to bundle and minify static web assets. */
3 |
4 | a.navbar-brand {
5 | white-space: normal;
6 | text-align: center;
7 | word-break: break-all;
8 | }
9 |
10 | a {
11 | color: #0077cc;
12 | }
13 |
14 | .btn-primary {
15 | color: #fff;
16 | background-color: #1b6ec2;
17 | border-color: #1861ac;
18 | }
19 |
20 | .nav-pills .nav-link.active, .nav-pills .show > .nav-link {
21 | color: #fff;
22 | background-color: #1b6ec2;
23 | border-color: #1861ac;
24 | }
25 |
26 | .border-top {
27 | border-top: 1px solid #e5e5e5;
28 | }
29 | .border-bottom {
30 | border-bottom: 1px solid #e5e5e5;
31 | }
32 |
33 | .box-shadow {
34 | box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
35 | }
36 |
37 | button.accept-policy {
38 | font-size: 1rem;
39 | line-height: inherit;
40 | }
41 |
42 | .footer {
43 | position: absolute;
44 | bottom: 0;
45 | width: 100%;
46 | white-space: nowrap;
47 | line-height: 60px;
48 | }
49 |
--------------------------------------------------------------------------------
/WebComponents/Pages/Shared/_ValidationScriptsPartial.cshtml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/WebComponents/Pages/_ViewImports.cshtml:
--------------------------------------------------------------------------------
1 | @using WebComponents
2 | @namespace WebComponents.Pages
3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
--------------------------------------------------------------------------------
/WebComponents/Pages/_ViewStart.cshtml:
--------------------------------------------------------------------------------
1 | @{
2 | Layout = "_Layout";
3 | }
--------------------------------------------------------------------------------
/WebComponents/Program.cs:
--------------------------------------------------------------------------------
1 | using Vite.AspNetCore.Extensions;
2 |
3 | var builder = WebApplication.CreateBuilder(args);
4 |
5 | // Add the Vite Manifest Service.
6 | builder.Services.AddViteServices();
7 |
8 | // Add services to the container.
9 | builder.Services.AddRazorPages();
10 |
11 | var app = builder.Build();
12 |
13 | // Configure the HTTP request pipeline.
14 | if (!app.Environment.IsDevelopment())
15 | {
16 | app.UseExceptionHandler("/Error");
17 | // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
18 | app.UseHsts();
19 | }
20 |
21 | app.UseHttpsRedirection();
22 | app.UseStaticFiles();
23 | app.UseRouting();
24 | app.UseAuthorization();
25 | app.MapRazorPages();
26 | app.MapControllers();
27 |
28 | if (app.Environment.IsDevelopment())
29 | {
30 | app.UseViteDevMiddleware();
31 | }
32 |
33 | app.Run();
--------------------------------------------------------------------------------
/WebComponents/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "iisSettings": {
3 | "windowsAuthentication": false,
4 | "anonymousAuthentication": true,
5 | "iisExpress": {
6 | "applicationUrl": "http://localhost:50105",
7 | "sslPort": 44317
8 | }
9 | },
10 | "profiles": {
11 | "http": {
12 | "commandName": "Project",
13 | "dotnetRunMessages": true,
14 | "launchBrowser": true,
15 | "applicationUrl": "http://localhost:5002",
16 | "environmentVariables": {
17 | "ASPNETCORE_ENVIRONMENT": "Development"
18 | }
19 | },
20 | "https": {
21 | "commandName": "Project",
22 | "dotnetRunMessages": true,
23 | "launchBrowser": true,
24 | "applicationUrl": "https://localhost:7014;http://localhost:5002",
25 | "environmentVariables": {
26 | "ASPNETCORE_ENVIRONMENT": "Development"
27 | }
28 | },
29 | "IIS Express": {
30 | "commandName": "IISExpress",
31 | "launchBrowser": true,
32 | "environmentVariables": {
33 | "ASPNETCORE_ENVIRONMENT": "Development"
34 | }
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/WebComponents/WebComponents.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net7.0
5 | enable
6 | enable
7 | Linux
8 |
9 |
10 |
11 |
12 | .dockerignore
13 |
14 |
15 | true
16 | PreserveNewest
17 |
18 |
19 | true
20 | PreserveNewest
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | <_ContentIncludedByDefault Remove="wwwroot\js\main.js" />
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/WebComponents/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "DetailedErrors": true,
3 | "Logging": {
4 | "LogLevel": {
5 | "Default": "Information",
6 | "Microsoft.AspNetCore": "Warning"
7 | }
8 | },
9 | "Vite": {
10 | "Server": {
11 | "Port": 5173,
12 | "Https": true,
13 | "AutoRun" : true
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/WebComponents/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft.AspNetCore": "Warning"
6 | }
7 | },
8 | "AllowedHosts": "*",
9 | "Vite": {
10 | "Manifest": "assets.manifest.json"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/WebComponents/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-webcomponents",
3 | "version": "0.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "my-webcomponents",
9 | "version": "0.0.0",
10 | "devDependencies": {
11 | "bootstrap": "^5.2.3",
12 | "jquery": "^3.6.4",
13 | "jquery-validation": "^1.19.5",
14 | "jquery-validation-unobtrusive": "^4.0.0",
15 | "lit": "^2.7.2",
16 | "sass": "^1.61.0",
17 | "ts-node": "^10.9.1",
18 | "typescript": "^5.0.2",
19 | "vite": "^4.2.2"
20 | }
21 | },
22 | "node_modules/@cspotcode/source-map-support": {
23 | "version": "0.8.1",
24 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
25 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
26 | "dev": true,
27 | "dependencies": {
28 | "@jridgewell/trace-mapping": "0.3.9"
29 | },
30 | "engines": {
31 | "node": ">=12"
32 | }
33 | },
34 | "node_modules/@esbuild/android-arm": {
35 | "version": "0.17.15",
36 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.15.tgz",
37 | "integrity": "sha512-sRSOVlLawAktpMvDyJIkdLI/c/kdRTOqo8t6ImVxg8yT7LQDUYV5Rp2FKeEosLr6ZCja9UjYAzyRSxGteSJPYg==",
38 | "cpu": [
39 | "arm"
40 | ],
41 | "dev": true,
42 | "optional": true,
43 | "os": [
44 | "android"
45 | ],
46 | "engines": {
47 | "node": ">=12"
48 | }
49 | },
50 | "node_modules/@esbuild/android-arm64": {
51 | "version": "0.17.15",
52 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.15.tgz",
53 | "integrity": "sha512-0kOB6Y7Br3KDVgHeg8PRcvfLkq+AccreK///B4Z6fNZGr/tNHX0z2VywCc7PTeWp+bPvjA5WMvNXltHw5QjAIA==",
54 | "cpu": [
55 | "arm64"
56 | ],
57 | "dev": true,
58 | "optional": true,
59 | "os": [
60 | "android"
61 | ],
62 | "engines": {
63 | "node": ">=12"
64 | }
65 | },
66 | "node_modules/@esbuild/android-x64": {
67 | "version": "0.17.15",
68 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.15.tgz",
69 | "integrity": "sha512-MzDqnNajQZ63YkaUWVl9uuhcWyEyh69HGpMIrf+acR4otMkfLJ4sUCxqwbCyPGicE9dVlrysI3lMcDBjGiBBcQ==",
70 | "cpu": [
71 | "x64"
72 | ],
73 | "dev": true,
74 | "optional": true,
75 | "os": [
76 | "android"
77 | ],
78 | "engines": {
79 | "node": ">=12"
80 | }
81 | },
82 | "node_modules/@esbuild/darwin-arm64": {
83 | "version": "0.17.15",
84 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.15.tgz",
85 | "integrity": "sha512-7siLjBc88Z4+6qkMDxPT2juf2e8SJxmsbNVKFY2ifWCDT72v5YJz9arlvBw5oB4W/e61H1+HDB/jnu8nNg0rLA==",
86 | "cpu": [
87 | "arm64"
88 | ],
89 | "dev": true,
90 | "optional": true,
91 | "os": [
92 | "darwin"
93 | ],
94 | "engines": {
95 | "node": ">=12"
96 | }
97 | },
98 | "node_modules/@esbuild/darwin-x64": {
99 | "version": "0.17.15",
100 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.15.tgz",
101 | "integrity": "sha512-NbImBas2rXwYI52BOKTW342Tm3LTeVlaOQ4QPZ7XuWNKiO226DisFk/RyPk3T0CKZkKMuU69yOvlapJEmax7cg==",
102 | "cpu": [
103 | "x64"
104 | ],
105 | "dev": true,
106 | "optional": true,
107 | "os": [
108 | "darwin"
109 | ],
110 | "engines": {
111 | "node": ">=12"
112 | }
113 | },
114 | "node_modules/@esbuild/freebsd-arm64": {
115 | "version": "0.17.15",
116 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.15.tgz",
117 | "integrity": "sha512-Xk9xMDjBVG6CfgoqlVczHAdJnCs0/oeFOspFap5NkYAmRCT2qTn1vJWA2f419iMtsHSLm+O8B6SLV/HlY5cYKg==",
118 | "cpu": [
119 | "arm64"
120 | ],
121 | "dev": true,
122 | "optional": true,
123 | "os": [
124 | "freebsd"
125 | ],
126 | "engines": {
127 | "node": ">=12"
128 | }
129 | },
130 | "node_modules/@esbuild/freebsd-x64": {
131 | "version": "0.17.15",
132 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.15.tgz",
133 | "integrity": "sha512-3TWAnnEOdclvb2pnfsTWtdwthPfOz7qAfcwDLcfZyGJwm1SRZIMOeB5FODVhnM93mFSPsHB9b/PmxNNbSnd0RQ==",
134 | "cpu": [
135 | "x64"
136 | ],
137 | "dev": true,
138 | "optional": true,
139 | "os": [
140 | "freebsd"
141 | ],
142 | "engines": {
143 | "node": ">=12"
144 | }
145 | },
146 | "node_modules/@esbuild/linux-arm": {
147 | "version": "0.17.15",
148 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.15.tgz",
149 | "integrity": "sha512-MLTgiXWEMAMr8nmS9Gigx43zPRmEfeBfGCwxFQEMgJ5MC53QKajaclW6XDPjwJvhbebv+RzK05TQjvH3/aM4Xw==",
150 | "cpu": [
151 | "arm"
152 | ],
153 | "dev": true,
154 | "optional": true,
155 | "os": [
156 | "linux"
157 | ],
158 | "engines": {
159 | "node": ">=12"
160 | }
161 | },
162 | "node_modules/@esbuild/linux-arm64": {
163 | "version": "0.17.15",
164 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.15.tgz",
165 | "integrity": "sha512-T0MVnYw9KT6b83/SqyznTs/3Jg2ODWrZfNccg11XjDehIved2oQfrX/wVuev9N936BpMRaTR9I1J0tdGgUgpJA==",
166 | "cpu": [
167 | "arm64"
168 | ],
169 | "dev": true,
170 | "optional": true,
171 | "os": [
172 | "linux"
173 | ],
174 | "engines": {
175 | "node": ">=12"
176 | }
177 | },
178 | "node_modules/@esbuild/linux-ia32": {
179 | "version": "0.17.15",
180 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.15.tgz",
181 | "integrity": "sha512-wp02sHs015T23zsQtU4Cj57WiteiuASHlD7rXjKUyAGYzlOKDAjqK6bk5dMi2QEl/KVOcsjwL36kD+WW7vJt8Q==",
182 | "cpu": [
183 | "ia32"
184 | ],
185 | "dev": true,
186 | "optional": true,
187 | "os": [
188 | "linux"
189 | ],
190 | "engines": {
191 | "node": ">=12"
192 | }
193 | },
194 | "node_modules/@esbuild/linux-loong64": {
195 | "version": "0.17.15",
196 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.15.tgz",
197 | "integrity": "sha512-k7FsUJjGGSxwnBmMh8d7IbObWu+sF/qbwc+xKZkBe/lTAF16RqxRCnNHA7QTd3oS2AfGBAnHlXL67shV5bBThQ==",
198 | "cpu": [
199 | "loong64"
200 | ],
201 | "dev": true,
202 | "optional": true,
203 | "os": [
204 | "linux"
205 | ],
206 | "engines": {
207 | "node": ">=12"
208 | }
209 | },
210 | "node_modules/@esbuild/linux-mips64el": {
211 | "version": "0.17.15",
212 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.15.tgz",
213 | "integrity": "sha512-ZLWk6czDdog+Q9kE/Jfbilu24vEe/iW/Sj2d8EVsmiixQ1rM2RKH2n36qfxK4e8tVcaXkvuV3mU5zTZviE+NVQ==",
214 | "cpu": [
215 | "mips64el"
216 | ],
217 | "dev": true,
218 | "optional": true,
219 | "os": [
220 | "linux"
221 | ],
222 | "engines": {
223 | "node": ">=12"
224 | }
225 | },
226 | "node_modules/@esbuild/linux-ppc64": {
227 | "version": "0.17.15",
228 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.15.tgz",
229 | "integrity": "sha512-mY6dPkIRAiFHRsGfOYZC8Q9rmr8vOBZBme0/j15zFUKM99d4ILY4WpOC7i/LqoY+RE7KaMaSfvY8CqjJtuO4xg==",
230 | "cpu": [
231 | "ppc64"
232 | ],
233 | "dev": true,
234 | "optional": true,
235 | "os": [
236 | "linux"
237 | ],
238 | "engines": {
239 | "node": ">=12"
240 | }
241 | },
242 | "node_modules/@esbuild/linux-riscv64": {
243 | "version": "0.17.15",
244 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.15.tgz",
245 | "integrity": "sha512-EcyUtxffdDtWjjwIH8sKzpDRLcVtqANooMNASO59y+xmqqRYBBM7xVLQhqF7nksIbm2yHABptoioS9RAbVMWVA==",
246 | "cpu": [
247 | "riscv64"
248 | ],
249 | "dev": true,
250 | "optional": true,
251 | "os": [
252 | "linux"
253 | ],
254 | "engines": {
255 | "node": ">=12"
256 | }
257 | },
258 | "node_modules/@esbuild/linux-s390x": {
259 | "version": "0.17.15",
260 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.15.tgz",
261 | "integrity": "sha512-BuS6Jx/ezxFuHxgsfvz7T4g4YlVrmCmg7UAwboeyNNg0OzNzKsIZXpr3Sb/ZREDXWgt48RO4UQRDBxJN3B9Rbg==",
262 | "cpu": [
263 | "s390x"
264 | ],
265 | "dev": true,
266 | "optional": true,
267 | "os": [
268 | "linux"
269 | ],
270 | "engines": {
271 | "node": ">=12"
272 | }
273 | },
274 | "node_modules/@esbuild/linux-x64": {
275 | "version": "0.17.15",
276 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.15.tgz",
277 | "integrity": "sha512-JsdS0EgEViwuKsw5tiJQo9UdQdUJYuB+Mf6HxtJSPN35vez1hlrNb1KajvKWF5Sa35j17+rW1ECEO9iNrIXbNg==",
278 | "cpu": [
279 | "x64"
280 | ],
281 | "dev": true,
282 | "optional": true,
283 | "os": [
284 | "linux"
285 | ],
286 | "engines": {
287 | "node": ">=12"
288 | }
289 | },
290 | "node_modules/@esbuild/netbsd-x64": {
291 | "version": "0.17.15",
292 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.15.tgz",
293 | "integrity": "sha512-R6fKjtUysYGym6uXf6qyNephVUQAGtf3n2RCsOST/neIwPqRWcnc3ogcielOd6pT+J0RDR1RGcy0ZY7d3uHVLA==",
294 | "cpu": [
295 | "x64"
296 | ],
297 | "dev": true,
298 | "optional": true,
299 | "os": [
300 | "netbsd"
301 | ],
302 | "engines": {
303 | "node": ">=12"
304 | }
305 | },
306 | "node_modules/@esbuild/openbsd-x64": {
307 | "version": "0.17.15",
308 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.15.tgz",
309 | "integrity": "sha512-mVD4PGc26b8PI60QaPUltYKeSX0wxuy0AltC+WCTFwvKCq2+OgLP4+fFd+hZXzO2xW1HPKcytZBdjqL6FQFa7w==",
310 | "cpu": [
311 | "x64"
312 | ],
313 | "dev": true,
314 | "optional": true,
315 | "os": [
316 | "openbsd"
317 | ],
318 | "engines": {
319 | "node": ">=12"
320 | }
321 | },
322 | "node_modules/@esbuild/sunos-x64": {
323 | "version": "0.17.15",
324 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.15.tgz",
325 | "integrity": "sha512-U6tYPovOkw3459t2CBwGcFYfFRjivcJJc1WC8Q3funIwX8x4fP+R6xL/QuTPNGOblbq/EUDxj9GU+dWKX0oWlQ==",
326 | "cpu": [
327 | "x64"
328 | ],
329 | "dev": true,
330 | "optional": true,
331 | "os": [
332 | "sunos"
333 | ],
334 | "engines": {
335 | "node": ">=12"
336 | }
337 | },
338 | "node_modules/@esbuild/win32-arm64": {
339 | "version": "0.17.15",
340 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.15.tgz",
341 | "integrity": "sha512-W+Z5F++wgKAleDABemiyXVnzXgvRFs+GVKThSI+mGgleLWluv0D7Diz4oQpgdpNzh4i2nNDzQtWbjJiqutRp6Q==",
342 | "cpu": [
343 | "arm64"
344 | ],
345 | "dev": true,
346 | "optional": true,
347 | "os": [
348 | "win32"
349 | ],
350 | "engines": {
351 | "node": ">=12"
352 | }
353 | },
354 | "node_modules/@esbuild/win32-ia32": {
355 | "version": "0.17.15",
356 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.15.tgz",
357 | "integrity": "sha512-Muz/+uGgheShKGqSVS1KsHtCyEzcdOn/W/Xbh6H91Etm+wiIfwZaBn1W58MeGtfI8WA961YMHFYTthBdQs4t+w==",
358 | "cpu": [
359 | "ia32"
360 | ],
361 | "dev": true,
362 | "optional": true,
363 | "os": [
364 | "win32"
365 | ],
366 | "engines": {
367 | "node": ">=12"
368 | }
369 | },
370 | "node_modules/@esbuild/win32-x64": {
371 | "version": "0.17.15",
372 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.15.tgz",
373 | "integrity": "sha512-DjDa9ywLUUmjhV2Y9wUTIF+1XsmuFGvZoCmOWkli1XcNAh5t25cc7fgsCx4Zi/Uurep3TTLyDiKATgGEg61pkA==",
374 | "cpu": [
375 | "x64"
376 | ],
377 | "dev": true,
378 | "optional": true,
379 | "os": [
380 | "win32"
381 | ],
382 | "engines": {
383 | "node": ">=12"
384 | }
385 | },
386 | "node_modules/@jridgewell/resolve-uri": {
387 | "version": "3.1.1",
388 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
389 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
390 | "dev": true,
391 | "engines": {
392 | "node": ">=6.0.0"
393 | }
394 | },
395 | "node_modules/@jridgewell/sourcemap-codec": {
396 | "version": "1.4.15",
397 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
398 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
399 | "dev": true
400 | },
401 | "node_modules/@jridgewell/trace-mapping": {
402 | "version": "0.3.9",
403 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
404 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
405 | "dev": true,
406 | "dependencies": {
407 | "@jridgewell/resolve-uri": "^3.0.3",
408 | "@jridgewell/sourcemap-codec": "^1.4.10"
409 | }
410 | },
411 | "node_modules/@lit-labs/ssr-dom-shim": {
412 | "version": "1.1.0",
413 | "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.0.tgz",
414 | "integrity": "sha512-92uQ5ARf7UXYrzaFcAX3T2rTvaS9Z1//ukV+DqjACM4c8s0ZBQd7ayJU5Dh2AFLD/Ayuyz4uMmxQec8q3U4Ong==",
415 | "dev": true
416 | },
417 | "node_modules/@lit/reactive-element": {
418 | "version": "1.6.1",
419 | "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.1.tgz",
420 | "integrity": "sha512-va15kYZr7KZNNPZdxONGQzpUr+4sxVu7V/VG7a8mRfPPXUyhEYj5RzXCQmGrlP3tAh0L3HHm5AjBMFYRqlM9SA==",
421 | "dev": true,
422 | "dependencies": {
423 | "@lit-labs/ssr-dom-shim": "^1.0.0"
424 | }
425 | },
426 | "node_modules/@popperjs/core": {
427 | "version": "2.11.7",
428 | "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz",
429 | "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==",
430 | "dev": true,
431 | "peer": true,
432 | "funding": {
433 | "type": "opencollective",
434 | "url": "https://opencollective.com/popperjs"
435 | }
436 | },
437 | "node_modules/@tsconfig/node10": {
438 | "version": "1.0.9",
439 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
440 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
441 | "dev": true
442 | },
443 | "node_modules/@tsconfig/node12": {
444 | "version": "1.0.11",
445 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
446 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
447 | "dev": true
448 | },
449 | "node_modules/@tsconfig/node14": {
450 | "version": "1.0.3",
451 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
452 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
453 | "dev": true
454 | },
455 | "node_modules/@tsconfig/node16": {
456 | "version": "1.0.3",
457 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
458 | "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
459 | "dev": true
460 | },
461 | "node_modules/@types/node": {
462 | "version": "18.15.11",
463 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
464 | "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==",
465 | "dev": true,
466 | "peer": true
467 | },
468 | "node_modules/@types/trusted-types": {
469 | "version": "2.0.3",
470 | "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
471 | "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==",
472 | "dev": true
473 | },
474 | "node_modules/acorn": {
475 | "version": "8.8.2",
476 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
477 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
478 | "dev": true,
479 | "bin": {
480 | "acorn": "bin/acorn"
481 | },
482 | "engines": {
483 | "node": ">=0.4.0"
484 | }
485 | },
486 | "node_modules/acorn-walk": {
487 | "version": "8.2.0",
488 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
489 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
490 | "dev": true,
491 | "engines": {
492 | "node": ">=0.4.0"
493 | }
494 | },
495 | "node_modules/anymatch": {
496 | "version": "3.1.3",
497 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
498 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
499 | "dev": true,
500 | "dependencies": {
501 | "normalize-path": "^3.0.0",
502 | "picomatch": "^2.0.4"
503 | },
504 | "engines": {
505 | "node": ">= 8"
506 | }
507 | },
508 | "node_modules/arg": {
509 | "version": "4.1.3",
510 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
511 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
512 | "dev": true
513 | },
514 | "node_modules/binary-extensions": {
515 | "version": "2.2.0",
516 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
517 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
518 | "dev": true,
519 | "engines": {
520 | "node": ">=8"
521 | }
522 | },
523 | "node_modules/bootstrap": {
524 | "version": "5.2.3",
525 | "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
526 | "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
527 | "dev": true,
528 | "funding": [
529 | {
530 | "type": "github",
531 | "url": "https://github.com/sponsors/twbs"
532 | },
533 | {
534 | "type": "opencollective",
535 | "url": "https://opencollective.com/bootstrap"
536 | }
537 | ],
538 | "peerDependencies": {
539 | "@popperjs/core": "^2.11.6"
540 | }
541 | },
542 | "node_modules/braces": {
543 | "version": "3.0.2",
544 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
545 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
546 | "dev": true,
547 | "dependencies": {
548 | "fill-range": "^7.0.1"
549 | },
550 | "engines": {
551 | "node": ">=8"
552 | }
553 | },
554 | "node_modules/chokidar": {
555 | "version": "3.5.3",
556 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
557 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
558 | "dev": true,
559 | "funding": [
560 | {
561 | "type": "individual",
562 | "url": "https://paulmillr.com/funding/"
563 | }
564 | ],
565 | "dependencies": {
566 | "anymatch": "~3.1.2",
567 | "braces": "~3.0.2",
568 | "glob-parent": "~5.1.2",
569 | "is-binary-path": "~2.1.0",
570 | "is-glob": "~4.0.1",
571 | "normalize-path": "~3.0.0",
572 | "readdirp": "~3.6.0"
573 | },
574 | "engines": {
575 | "node": ">= 8.10.0"
576 | },
577 | "optionalDependencies": {
578 | "fsevents": "~2.3.2"
579 | }
580 | },
581 | "node_modules/create-require": {
582 | "version": "1.1.1",
583 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
584 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
585 | "dev": true
586 | },
587 | "node_modules/diff": {
588 | "version": "4.0.2",
589 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
590 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
591 | "dev": true,
592 | "engines": {
593 | "node": ">=0.3.1"
594 | }
595 | },
596 | "node_modules/esbuild": {
597 | "version": "0.17.15",
598 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.15.tgz",
599 | "integrity": "sha512-LBUV2VsUIc/iD9ME75qhT4aJj0r75abCVS0jakhFzOtR7TQsqQA5w0tZ+KTKnwl3kXE0MhskNdHDh/I5aCR1Zw==",
600 | "dev": true,
601 | "hasInstallScript": true,
602 | "bin": {
603 | "esbuild": "bin/esbuild"
604 | },
605 | "engines": {
606 | "node": ">=12"
607 | },
608 | "optionalDependencies": {
609 | "@esbuild/android-arm": "0.17.15",
610 | "@esbuild/android-arm64": "0.17.15",
611 | "@esbuild/android-x64": "0.17.15",
612 | "@esbuild/darwin-arm64": "0.17.15",
613 | "@esbuild/darwin-x64": "0.17.15",
614 | "@esbuild/freebsd-arm64": "0.17.15",
615 | "@esbuild/freebsd-x64": "0.17.15",
616 | "@esbuild/linux-arm": "0.17.15",
617 | "@esbuild/linux-arm64": "0.17.15",
618 | "@esbuild/linux-ia32": "0.17.15",
619 | "@esbuild/linux-loong64": "0.17.15",
620 | "@esbuild/linux-mips64el": "0.17.15",
621 | "@esbuild/linux-ppc64": "0.17.15",
622 | "@esbuild/linux-riscv64": "0.17.15",
623 | "@esbuild/linux-s390x": "0.17.15",
624 | "@esbuild/linux-x64": "0.17.15",
625 | "@esbuild/netbsd-x64": "0.17.15",
626 | "@esbuild/openbsd-x64": "0.17.15",
627 | "@esbuild/sunos-x64": "0.17.15",
628 | "@esbuild/win32-arm64": "0.17.15",
629 | "@esbuild/win32-ia32": "0.17.15",
630 | "@esbuild/win32-x64": "0.17.15"
631 | }
632 | },
633 | "node_modules/fill-range": {
634 | "version": "7.0.1",
635 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
636 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
637 | "dev": true,
638 | "dependencies": {
639 | "to-regex-range": "^5.0.1"
640 | },
641 | "engines": {
642 | "node": ">=8"
643 | }
644 | },
645 | "node_modules/fsevents": {
646 | "version": "2.3.2",
647 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
648 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
649 | "dev": true,
650 | "hasInstallScript": true,
651 | "optional": true,
652 | "os": [
653 | "darwin"
654 | ],
655 | "engines": {
656 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
657 | }
658 | },
659 | "node_modules/function-bind": {
660 | "version": "1.1.1",
661 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
662 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
663 | "dev": true
664 | },
665 | "node_modules/glob-parent": {
666 | "version": "5.1.2",
667 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
668 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
669 | "dev": true,
670 | "dependencies": {
671 | "is-glob": "^4.0.1"
672 | },
673 | "engines": {
674 | "node": ">= 6"
675 | }
676 | },
677 | "node_modules/has": {
678 | "version": "1.0.3",
679 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
680 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
681 | "dev": true,
682 | "dependencies": {
683 | "function-bind": "^1.1.1"
684 | },
685 | "engines": {
686 | "node": ">= 0.4.0"
687 | }
688 | },
689 | "node_modules/immutable": {
690 | "version": "4.3.0",
691 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
692 | "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==",
693 | "dev": true
694 | },
695 | "node_modules/is-binary-path": {
696 | "version": "2.1.0",
697 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
698 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
699 | "dev": true,
700 | "dependencies": {
701 | "binary-extensions": "^2.0.0"
702 | },
703 | "engines": {
704 | "node": ">=8"
705 | }
706 | },
707 | "node_modules/is-core-module": {
708 | "version": "2.11.0",
709 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
710 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
711 | "dev": true,
712 | "dependencies": {
713 | "has": "^1.0.3"
714 | },
715 | "funding": {
716 | "url": "https://github.com/sponsors/ljharb"
717 | }
718 | },
719 | "node_modules/is-extglob": {
720 | "version": "2.1.1",
721 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
722 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
723 | "dev": true,
724 | "engines": {
725 | "node": ">=0.10.0"
726 | }
727 | },
728 | "node_modules/is-glob": {
729 | "version": "4.0.3",
730 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
731 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
732 | "dev": true,
733 | "dependencies": {
734 | "is-extglob": "^2.1.1"
735 | },
736 | "engines": {
737 | "node": ">=0.10.0"
738 | }
739 | },
740 | "node_modules/is-number": {
741 | "version": "7.0.0",
742 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
743 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
744 | "dev": true,
745 | "engines": {
746 | "node": ">=0.12.0"
747 | }
748 | },
749 | "node_modules/jquery": {
750 | "version": "3.6.4",
751 | "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz",
752 | "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==",
753 | "dev": true
754 | },
755 | "node_modules/jquery-validation": {
756 | "version": "1.19.5",
757 | "resolved": "https://registry.npmjs.org/jquery-validation/-/jquery-validation-1.19.5.tgz",
758 | "integrity": "sha512-X2SmnPq1mRiDecVYL8edWx+yTBZDyC8ohWXFhXdtqFHgU9Wd4KHkvcbCoIZ0JaSaumzS8s2gXSkP8F7ivg/8ZQ==",
759 | "dev": true,
760 | "peerDependencies": {
761 | "jquery": "^1.7 || ^2.0 || ^3.1"
762 | }
763 | },
764 | "node_modules/jquery-validation-unobtrusive": {
765 | "version": "4.0.0",
766 | "resolved": "https://registry.npmjs.org/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz",
767 | "integrity": "sha512-1ervYFFv6LX/rp7ktuLnMakHNG0piNRDyROI8Ir3hL1vPIwylAehB1AY3BPrYJnzW3WmwWryZq+Bz4sazZK9iQ==",
768 | "dev": true,
769 | "dependencies": {
770 | "jquery": "^3.6.0",
771 | "jquery-validation": ">=1.19"
772 | }
773 | },
774 | "node_modules/lit": {
775 | "version": "2.7.2",
776 | "resolved": "https://registry.npmjs.org/lit/-/lit-2.7.2.tgz",
777 | "integrity": "sha512-9QnZmG5mIKPRja96cpndMclLSi0Qrz2BXD6EbqNqCKMMjOWVm/BwAeXufFk2jqFsNmY07HOzU8X+8aTSVt3yrA==",
778 | "dev": true,
779 | "dependencies": {
780 | "@lit/reactive-element": "^1.6.0",
781 | "lit-element": "^3.3.0",
782 | "lit-html": "^2.7.0"
783 | }
784 | },
785 | "node_modules/lit-element": {
786 | "version": "3.3.1",
787 | "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.1.tgz",
788 | "integrity": "sha512-Gl+2409uXWbf7n6cCl7Kzasm7zjT9xmdwi2BhLNi70sRKAgRkqueDu5mSIH3hPYMM0/vqBCdPXod3NbGkRA2ww==",
789 | "dev": true,
790 | "dependencies": {
791 | "@lit-labs/ssr-dom-shim": "^1.1.0",
792 | "@lit/reactive-element": "^1.3.0",
793 | "lit-html": "^2.7.0"
794 | }
795 | },
796 | "node_modules/lit-html": {
797 | "version": "2.7.2",
798 | "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.7.2.tgz",
799 | "integrity": "sha512-ZJCfKlA2XELu5tn7XuzOziGFGvf1SeQm+ngLWoJ8bXtSkRrrR3ms6SWy+gsdxeYwySLij5xAhdd2C3EX0ftxdQ==",
800 | "dev": true,
801 | "dependencies": {
802 | "@types/trusted-types": "^2.0.2"
803 | }
804 | },
805 | "node_modules/make-error": {
806 | "version": "1.3.6",
807 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
808 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
809 | "dev": true
810 | },
811 | "node_modules/nanoid": {
812 | "version": "3.3.6",
813 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
814 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
815 | "dev": true,
816 | "funding": [
817 | {
818 | "type": "github",
819 | "url": "https://github.com/sponsors/ai"
820 | }
821 | ],
822 | "bin": {
823 | "nanoid": "bin/nanoid.cjs"
824 | },
825 | "engines": {
826 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
827 | }
828 | },
829 | "node_modules/normalize-path": {
830 | "version": "3.0.0",
831 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
832 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
833 | "dev": true,
834 | "engines": {
835 | "node": ">=0.10.0"
836 | }
837 | },
838 | "node_modules/path-parse": {
839 | "version": "1.0.7",
840 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
841 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
842 | "dev": true
843 | },
844 | "node_modules/picocolors": {
845 | "version": "1.0.0",
846 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
847 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
848 | "dev": true
849 | },
850 | "node_modules/picomatch": {
851 | "version": "2.3.1",
852 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
853 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
854 | "dev": true,
855 | "engines": {
856 | "node": ">=8.6"
857 | },
858 | "funding": {
859 | "url": "https://github.com/sponsors/jonschlinkert"
860 | }
861 | },
862 | "node_modules/postcss": {
863 | "version": "8.4.21",
864 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
865 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
866 | "dev": true,
867 | "funding": [
868 | {
869 | "type": "opencollective",
870 | "url": "https://opencollective.com/postcss/"
871 | },
872 | {
873 | "type": "tidelift",
874 | "url": "https://tidelift.com/funding/github/npm/postcss"
875 | }
876 | ],
877 | "dependencies": {
878 | "nanoid": "^3.3.4",
879 | "picocolors": "^1.0.0",
880 | "source-map-js": "^1.0.2"
881 | },
882 | "engines": {
883 | "node": "^10 || ^12 || >=14"
884 | }
885 | },
886 | "node_modules/readdirp": {
887 | "version": "3.6.0",
888 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
889 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
890 | "dev": true,
891 | "dependencies": {
892 | "picomatch": "^2.2.1"
893 | },
894 | "engines": {
895 | "node": ">=8.10.0"
896 | }
897 | },
898 | "node_modules/resolve": {
899 | "version": "1.22.2",
900 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
901 | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
902 | "dev": true,
903 | "dependencies": {
904 | "is-core-module": "^2.11.0",
905 | "path-parse": "^1.0.7",
906 | "supports-preserve-symlinks-flag": "^1.0.0"
907 | },
908 | "bin": {
909 | "resolve": "bin/resolve"
910 | },
911 | "funding": {
912 | "url": "https://github.com/sponsors/ljharb"
913 | }
914 | },
915 | "node_modules/rollup": {
916 | "version": "3.20.2",
917 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz",
918 | "integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==",
919 | "dev": true,
920 | "bin": {
921 | "rollup": "dist/bin/rollup"
922 | },
923 | "engines": {
924 | "node": ">=14.18.0",
925 | "npm": ">=8.0.0"
926 | },
927 | "optionalDependencies": {
928 | "fsevents": "~2.3.2"
929 | }
930 | },
931 | "node_modules/sass": {
932 | "version": "1.61.0",
933 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.61.0.tgz",
934 | "integrity": "sha512-PDsN7BrVkNZK2+dj/dpKQAWZavbAQ87IXqVvw2+oEYI+GwlTWkvbQtL7F2cCNbMqJEYKPh1EcjSxsnqIb/kyaQ==",
935 | "dev": true,
936 | "dependencies": {
937 | "chokidar": ">=3.0.0 <4.0.0",
938 | "immutable": "^4.0.0",
939 | "source-map-js": ">=0.6.2 <2.0.0"
940 | },
941 | "bin": {
942 | "sass": "sass.js"
943 | },
944 | "engines": {
945 | "node": ">=14.0.0"
946 | }
947 | },
948 | "node_modules/source-map-js": {
949 | "version": "1.0.2",
950 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
951 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
952 | "dev": true,
953 | "engines": {
954 | "node": ">=0.10.0"
955 | }
956 | },
957 | "node_modules/supports-preserve-symlinks-flag": {
958 | "version": "1.0.0",
959 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
960 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
961 | "dev": true,
962 | "engines": {
963 | "node": ">= 0.4"
964 | },
965 | "funding": {
966 | "url": "https://github.com/sponsors/ljharb"
967 | }
968 | },
969 | "node_modules/to-regex-range": {
970 | "version": "5.0.1",
971 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
972 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
973 | "dev": true,
974 | "dependencies": {
975 | "is-number": "^7.0.0"
976 | },
977 | "engines": {
978 | "node": ">=8.0"
979 | }
980 | },
981 | "node_modules/ts-node": {
982 | "version": "10.9.1",
983 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
984 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
985 | "dev": true,
986 | "dependencies": {
987 | "@cspotcode/source-map-support": "^0.8.0",
988 | "@tsconfig/node10": "^1.0.7",
989 | "@tsconfig/node12": "^1.0.7",
990 | "@tsconfig/node14": "^1.0.0",
991 | "@tsconfig/node16": "^1.0.2",
992 | "acorn": "^8.4.1",
993 | "acorn-walk": "^8.1.1",
994 | "arg": "^4.1.0",
995 | "create-require": "^1.1.0",
996 | "diff": "^4.0.1",
997 | "make-error": "^1.1.1",
998 | "v8-compile-cache-lib": "^3.0.1",
999 | "yn": "3.1.1"
1000 | },
1001 | "bin": {
1002 | "ts-node": "dist/bin.js",
1003 | "ts-node-cwd": "dist/bin-cwd.js",
1004 | "ts-node-esm": "dist/bin-esm.js",
1005 | "ts-node-script": "dist/bin-script.js",
1006 | "ts-node-transpile-only": "dist/bin-transpile.js",
1007 | "ts-script": "dist/bin-script-deprecated.js"
1008 | },
1009 | "peerDependencies": {
1010 | "@swc/core": ">=1.2.50",
1011 | "@swc/wasm": ">=1.2.50",
1012 | "@types/node": "*",
1013 | "typescript": ">=2.7"
1014 | },
1015 | "peerDependenciesMeta": {
1016 | "@swc/core": {
1017 | "optional": true
1018 | },
1019 | "@swc/wasm": {
1020 | "optional": true
1021 | }
1022 | }
1023 | },
1024 | "node_modules/typescript": {
1025 | "version": "5.0.4",
1026 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
1027 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
1028 | "dev": true,
1029 | "bin": {
1030 | "tsc": "bin/tsc",
1031 | "tsserver": "bin/tsserver"
1032 | },
1033 | "engines": {
1034 | "node": ">=12.20"
1035 | }
1036 | },
1037 | "node_modules/v8-compile-cache-lib": {
1038 | "version": "3.0.1",
1039 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
1040 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
1041 | "dev": true
1042 | },
1043 | "node_modules/vite": {
1044 | "version": "4.2.2",
1045 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.2.tgz",
1046 | "integrity": "sha512-PcNtT5HeDxb3QaSqFYkEum8f5sCVe0R3WK20qxgIvNBZPXU/Obxs/+ubBMeE7nLWeCo2LDzv+8hRYSlcaSehig==",
1047 | "dev": true,
1048 | "dependencies": {
1049 | "esbuild": "^0.17.5",
1050 | "postcss": "^8.4.21",
1051 | "resolve": "^1.22.1",
1052 | "rollup": "^3.18.0"
1053 | },
1054 | "bin": {
1055 | "vite": "bin/vite.js"
1056 | },
1057 | "engines": {
1058 | "node": "^14.18.0 || >=16.0.0"
1059 | },
1060 | "optionalDependencies": {
1061 | "fsevents": "~2.3.2"
1062 | },
1063 | "peerDependencies": {
1064 | "@types/node": ">= 14",
1065 | "less": "*",
1066 | "sass": "*",
1067 | "stylus": "*",
1068 | "sugarss": "*",
1069 | "terser": "^5.4.0"
1070 | },
1071 | "peerDependenciesMeta": {
1072 | "@types/node": {
1073 | "optional": true
1074 | },
1075 | "less": {
1076 | "optional": true
1077 | },
1078 | "sass": {
1079 | "optional": true
1080 | },
1081 | "stylus": {
1082 | "optional": true
1083 | },
1084 | "sugarss": {
1085 | "optional": true
1086 | },
1087 | "terser": {
1088 | "optional": true
1089 | }
1090 | }
1091 | },
1092 | "node_modules/yn": {
1093 | "version": "3.1.1",
1094 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
1095 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
1096 | "dev": true,
1097 | "engines": {
1098 | "node": ">=6"
1099 | }
1100 | }
1101 | }
1102 | }
1103 |
--------------------------------------------------------------------------------
/WebComponents/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-webcomponents",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "tsc && vite build",
9 | "preview": "vite preview"
10 | },
11 | "devDependencies": {
12 | "ts-node": "^10.9.1",
13 | "typescript": "^5.0.2",
14 | "vite": "^4.2.2",
15 | "lit": "^2.7.2",
16 | "bootstrap": "^5.2.3",
17 | "jquery": "^3.6.4",
18 | "jquery-validation": "^1.19.5",
19 | "jquery-validation-unobtrusive": "^4.0.0",
20 | "sass": "^1.61.0"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/WebComponents/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "ESNext",
5 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
6 | "declaration": true,
7 | "emitDeclarationOnly": true,
8 | "outDir": "./Client/types",
9 | "strict": true,
10 | "noUnusedLocals": true,
11 | "noUnusedParameters": true,
12 | "noImplicitReturns": true,
13 | "noFallthroughCasesInSwitch": true,
14 | "moduleResolution": "Node",
15 | "isolatedModules": true,
16 | "allowSyntheticDefaultImports": true,
17 | "experimentalDecorators": true,
18 | "forceConsistentCasingInFileNames": true,
19 | "useDefineForClassFields": false,
20 | "skipLibCheck": true,
21 | "types": [
22 | "vite/client"
23 | ]
24 | },
25 | "include": [
26 | "vite.config.ts",
27 | "Client"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/WebComponents/vite.config.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Name: vite.config.ts
3 | * Description: Vite configuration file
4 | */
5 |
6 | import { UserConfig, defineConfig } from 'vite';
7 | import { spawn } from "child_process";
8 | import fs from "fs";
9 | import path from "path";
10 |
11 | // @ts-ignore
12 | import appsettings from "./appsettings.json";
13 | // @ts-ignore
14 | import appsettingsDev from "./appsettings.Development.json";
15 |
16 | import * as process from "process";
17 |
18 | // Get base folder for certificates.
19 | const baseFolder =
20 | process.env.APPDATA !== undefined && process.env.APPDATA !== ''
21 | ? `${process.env.APPDATA}/ASP.NET/https`
22 | : `${process.env.HOME}/.aspnet/https`;
23 |
24 | // Generate the certificate name using the NPM package name
25 | const certificateName = process.env.npm_package_name;
26 |
27 | // Define certificate filepath
28 | const certFilePath = path.join(baseFolder, `${certificateName}.pem`);
29 | // Define key filepath
30 | const keyFilePath = path.join(baseFolder, `${certificateName}.key`);
31 |
32 | // Pattern for CSS files
33 | const cssPattern = /\.css$/;
34 | // Pattern for image files
35 | const imagePattern = /\.(png|jpe?g|gif|svg|webp|avif)$/;
36 |
37 | // Export Vite configuration
38 | export default defineConfig(async () => {
39 | // Ensure the certificate and key exist
40 | if (!fs.existsSync(certFilePath) || !fs.existsSync(keyFilePath)) {
41 | // Wait for the certificate to be generated
42 | await new Promise((resolve) => {
43 | spawn('dotnet', [
44 | 'dev-certs',
45 | 'https',
46 | '--export-path',
47 | certFilePath,
48 | '--format',
49 | 'Pem',
50 | '--no-password',
51 | ], { stdio: 'inherit', })
52 | .on('exit', (code: any) => {
53 | resolve();
54 | if (code) {
55 | process.exit(code);
56 | }
57 | });
58 | });
59 | };
60 |
61 | // Define Vite configuration
62 | const config: UserConfig = {
63 | clearScreen: true,
64 | appType: 'mpa',
65 | root: 'Client',
66 | publicDir: 'public',
67 | build: {
68 | manifest: appsettings.Vite.Manifest,
69 | emptyOutDir: true,
70 | outDir: '../wwwroot',
71 | assetsDir: '',
72 | rollupOptions: {
73 | input: ['Client/main.ts', "Client/scss/site.scss" ],
74 | // remove hashing, but I could add it back in
75 | output: {
76 | // Save entry files to the appropriate folder
77 | entryFileNames: 'js/[name].js',
78 | // Save chunk files to the js folder
79 | chunkFileNames: 'js/[name]-chunk.js',
80 | // Save asset files to the appropriate folder
81 | assetFileNames: (info) => {
82 | if (info.name) {
83 | // If the file is a CSS file, save it to the css folder
84 | if (cssPattern.test(info.name)) {
85 | return 'css/[name][extname]';
86 | }
87 | // If the file is an image file, save it to the images folder
88 | if (imagePattern.test(info.name)) {
89 | return 'images/[name][extname]';
90 | }
91 |
92 | // If the file is any other type of file, save it to the assets folder
93 | return 'assets/[name][extname]';
94 | } else {
95 | // If the file name is not specified, save it to the output directory
96 | return '[name][extname]';
97 | }
98 | },
99 | }
100 | },
101 | },
102 | server: {
103 | port: appsettingsDev.Vite.Server.Port,
104 | strictPort: true,
105 | https: {
106 | cert: certFilePath,
107 | key: keyFilePath
108 | },
109 | hmr: {
110 | host: "localhost",
111 | clientPort: appsettingsDev.Vite.Server.Port
112 | }
113 | }
114 | }
115 |
116 | return config;
117 | });
--------------------------------------------------------------------------------
/global.json:
--------------------------------------------------------------------------------
1 | {
2 | "sdk": {
3 | "version": "7.0.0",
4 | "rollForward": "latestMinor",
5 | "allowPrerelease": false
6 | }
7 | }
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # Lit-Powered Web Components In ASP.NET Core
2 |
3 | Razor is awesome and the power of server-rendered cannot be underestimated. That said, sometimes you want a pure client-side experience and that's where JavaScript comes in.
4 |
5 | This solution shows how to set up Vite to build Lit components into standalone Web Components that can be reused through out your ASP.NET Core applications.
6 |
7 | - Using the ViteMiddleware package that supports development time and build time. The caveat is your `package.json` has to be at the root, that's fine.
8 | - The `Index.chstml` file has a ` ` tag. **All Web Components must have a dash in them, it's the law of the internet.**
9 | - The component is implemented under `Client/src/Counter.ts`.
10 |
11 | ```typescript
12 | import {html, css, LitElement} from 'lit';
13 | import {customElement, property} from 'lit/decorators.js';
14 | @customElement("my-counter")
15 | export class Counter extends LitElement {
16 | static get styles() {
17 | return css`
18 | button { font-size: 3em }
19 | `;
20 | }
21 | constructor() {
22 | super();
23 | this.count = 0;
24 | this.display = "Click Me";
25 | }
26 | @property()
27 | count = 0;
28 | @property()
29 | display = "Click Me";
30 | increment() {
31 | this.count++;
32 | this.display = `Current Count: ${this.count}`;
33 | }
34 | render() {
35 | return html`
36 |
37 | ${this.display}
38 |
39 | `
40 | }
41 | }
42 | ```
43 | ## Conclusion
44 |
45 | This is an example, but here are some recommendations if you'd like to use this as a jumping off point:
46 |
47 | 1. Let Vite process all your assets, you can do neat things link minify, and purge unused files from the final artifacts build.
48 | 2. Remove all the `lib` from the project and add the dependencies from NPM, you get the benefits previously mentioned.
49 | 3. Read the VITE documentation, seriously.
50 | 4. Read the LIT documentation.
51 | 5. Get used to TypeScript. Most IDEs have great support for it, and you won't make as many mistakes.
52 |
53 | ## Conclusion
54 |
55 | Hope you find this repository helpful. Cheers. 🍻
--------------------------------------------------------------------------------