nativecorejs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/README.md +22 -0
  2. package/dist/components/builtinRegistry.d.ts +2 -0
  3. package/dist/components/builtinRegistry.js +72 -0
  4. package/dist/components/index.d.ts +59 -0
  5. package/dist/components/index.js +59 -0
  6. package/dist/components/loading-spinner.d.ts +5 -0
  7. package/dist/components/loading-spinner.js +48 -0
  8. package/dist/components/nc-a.d.ts +45 -0
  9. package/dist/components/nc-a.js +290 -0
  10. package/dist/components/nc-accordion.d.ts +36 -0
  11. package/dist/components/nc-accordion.js +186 -0
  12. package/dist/components/nc-alert.d.ts +11 -0
  13. package/dist/components/nc-alert.js +127 -0
  14. package/dist/components/nc-animation.d.ts +117 -0
  15. package/dist/components/nc-animation.js +1053 -0
  16. package/dist/components/nc-autocomplete.d.ts +41 -0
  17. package/dist/components/nc-autocomplete.js +275 -0
  18. package/dist/components/nc-avatar-group.d.ts +7 -0
  19. package/dist/components/nc-avatar-group.js +85 -0
  20. package/dist/components/nc-avatar.d.ts +9 -0
  21. package/dist/components/nc-avatar.js +127 -0
  22. package/dist/components/nc-badge.d.ts +7 -0
  23. package/dist/components/nc-badge.js +63 -0
  24. package/dist/components/nc-bottom-nav.d.ts +53 -0
  25. package/dist/components/nc-bottom-nav.js +198 -0
  26. package/dist/components/nc-breadcrumb.d.ts +10 -0
  27. package/dist/components/nc-breadcrumb.js +71 -0
  28. package/dist/components/nc-button.d.ts +38 -0
  29. package/dist/components/nc-button.js +293 -0
  30. package/dist/components/nc-card.d.ts +11 -0
  31. package/dist/components/nc-card.js +74 -0
  32. package/dist/components/nc-checkbox.d.ts +16 -0
  33. package/dist/components/nc-checkbox.js +194 -0
  34. package/dist/components/nc-chip.d.ts +8 -0
  35. package/dist/components/nc-chip.js +89 -0
  36. package/dist/components/nc-code.d.ts +37 -0
  37. package/dist/components/nc-code.js +315 -0
  38. package/dist/components/nc-collapsible.d.ts +33 -0
  39. package/dist/components/nc-collapsible.js +148 -0
  40. package/dist/components/nc-color-picker.d.ts +33 -0
  41. package/dist/components/nc-color-picker.js +265 -0
  42. package/dist/components/nc-copy-button.d.ts +10 -0
  43. package/dist/components/nc-copy-button.js +94 -0
  44. package/dist/components/nc-date-picker.d.ts +41 -0
  45. package/dist/components/nc-date-picker.js +443 -0
  46. package/dist/components/nc-div.d.ts +53 -0
  47. package/dist/components/nc-div.js +270 -0
  48. package/dist/components/nc-divider.d.ts +7 -0
  49. package/dist/components/nc-divider.js +57 -0
  50. package/dist/components/nc-drawer.d.ts +40 -0
  51. package/dist/components/nc-drawer.js +217 -0
  52. package/dist/components/nc-dropdown.d.ts +41 -0
  53. package/dist/components/nc-dropdown.js +170 -0
  54. package/dist/components/nc-empty-state.d.ts +5 -0
  55. package/dist/components/nc-empty-state.js +76 -0
  56. package/dist/components/nc-file-upload.d.ts +40 -0
  57. package/dist/components/nc-file-upload.js +336 -0
  58. package/dist/components/nc-form.d.ts +70 -0
  59. package/dist/components/nc-form.js +273 -0
  60. package/dist/components/nc-image.d.ts +10 -0
  61. package/dist/components/nc-image.js +139 -0
  62. package/dist/components/nc-input.d.ts +25 -0
  63. package/dist/components/nc-input.js +302 -0
  64. package/dist/components/nc-kbd.d.ts +5 -0
  65. package/dist/components/nc-kbd.js +34 -0
  66. package/dist/components/nc-menu-item.d.ts +43 -0
  67. package/dist/components/nc-menu-item.js +182 -0
  68. package/dist/components/nc-menu.d.ts +76 -0
  69. package/dist/components/nc-menu.js +360 -0
  70. package/dist/components/nc-modal.d.ts +51 -0
  71. package/dist/components/nc-modal.js +231 -0
  72. package/dist/components/nc-nav-item.d.ts +35 -0
  73. package/dist/components/nc-nav-item.js +142 -0
  74. package/dist/components/nc-number-input.d.ts +22 -0
  75. package/dist/components/nc-number-input.js +270 -0
  76. package/dist/components/nc-otp-input.d.ts +41 -0
  77. package/dist/components/nc-otp-input.js +227 -0
  78. package/dist/components/nc-pagination.d.ts +28 -0
  79. package/dist/components/nc-pagination.js +171 -0
  80. package/dist/components/nc-popover.d.ts +58 -0
  81. package/dist/components/nc-popover.js +301 -0
  82. package/dist/components/nc-progress-circular.d.ts +7 -0
  83. package/dist/components/nc-progress-circular.js +67 -0
  84. package/dist/components/nc-progress.d.ts +7 -0
  85. package/dist/components/nc-progress.js +109 -0
  86. package/dist/components/nc-radio.d.ts +13 -0
  87. package/dist/components/nc-radio.js +169 -0
  88. package/dist/components/nc-rating.d.ts +19 -0
  89. package/dist/components/nc-rating.js +187 -0
  90. package/dist/components/nc-rich-text.d.ts +43 -0
  91. package/dist/components/nc-rich-text.js +310 -0
  92. package/dist/components/nc-scroll-top.d.ts +28 -0
  93. package/dist/components/nc-scroll-top.js +103 -0
  94. package/dist/components/nc-select.d.ts +51 -0
  95. package/dist/components/nc-select.js +425 -0
  96. package/dist/components/nc-skeleton.d.ts +7 -0
  97. package/dist/components/nc-skeleton.js +90 -0
  98. package/dist/components/nc-slider.d.ts +41 -0
  99. package/dist/components/nc-slider.js +268 -0
  100. package/dist/components/nc-snackbar.d.ts +51 -0
  101. package/dist/components/nc-snackbar.js +200 -0
  102. package/dist/components/nc-splash.d.ts +25 -0
  103. package/dist/components/nc-splash.js +296 -0
  104. package/dist/components/nc-stepper.d.ts +50 -0
  105. package/dist/components/nc-stepper.js +236 -0
  106. package/dist/components/nc-switch.d.ts +14 -0
  107. package/dist/components/nc-switch.js +194 -0
  108. package/dist/components/nc-tab-item.d.ts +39 -0
  109. package/dist/components/nc-tab-item.js +127 -0
  110. package/dist/components/nc-table.d.ts +44 -0
  111. package/dist/components/nc-table.js +265 -0
  112. package/dist/components/nc-tabs.d.ts +79 -0
  113. package/dist/components/nc-tabs.js +519 -0
  114. package/dist/components/nc-tag-input.d.ts +49 -0
  115. package/dist/components/nc-tag-input.js +268 -0
  116. package/dist/components/nc-textarea.d.ts +15 -0
  117. package/dist/components/nc-textarea.js +164 -0
  118. package/dist/components/nc-time-picker.d.ts +51 -0
  119. package/dist/components/nc-time-picker.js +452 -0
  120. package/dist/components/nc-timeline.d.ts +53 -0
  121. package/dist/components/nc-timeline.js +171 -0
  122. package/dist/components/nc-tooltip.d.ts +27 -0
  123. package/dist/components/nc-tooltip.js +135 -0
  124. package/dist/core/component.d.ts +33 -0
  125. package/dist/core/component.js +208 -0
  126. package/dist/core/gpu-animation.d.ts +141 -0
  127. package/dist/core/gpu-animation.js +474 -0
  128. package/dist/core/lazyComponents.d.ts +13 -0
  129. package/dist/core/lazyComponents.js +73 -0
  130. package/dist/core/router.d.ts +55 -0
  131. package/dist/core/router.js +424 -0
  132. package/dist/core/state.d.ts +18 -0
  133. package/dist/core/state.js +153 -0
  134. package/dist/index.d.ts +14 -0
  135. package/dist/index.js +11 -0
  136. package/dist/utils/cacheBuster.d.ts +9 -0
  137. package/dist/utils/cacheBuster.js +12 -0
  138. package/dist/utils/dom.d.ts +16 -0
  139. package/dist/utils/dom.js +70 -0
  140. package/dist/utils/events.d.ts +20 -0
  141. package/dist/utils/events.js +80 -0
  142. package/dist/utils/templates.d.ts +2 -0
  143. package/dist/utils/templates.js +2 -0
  144. package/package.json +53 -0
  145. package/src/styles/base.css +40 -0
package/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # nativecorejs
2
+
3
+ This package now contains the extracted NativeCore runtime surface and the reusable built-in component library.
4
+
5
+ Current exports:
6
+
7
+ - router primitives
8
+ - component base class and custom element helper
9
+ - built-in framework component registry manifest
10
+ - extracted UI components from `nativecore/src/components/core`, including navigation, input, feedback, layout, picker, overlay, data-display, and utility `nc-*` elements
11
+ - multi-tag component modules such as accordion, bottom nav, form, stepper, and timeline
12
+ - state, computed, and effect primitives
13
+ - lazy component registry
14
+ - cache-busting utilities
15
+ - controller event and subscription cleanup helpers
16
+ - base framework CSS at `nativecorejs/styles/base.css`
17
+
18
+ Not extracted yet:
19
+
20
+ - app-shell specific components: `app-header`, `app-sidebar`, and `app-footer`
21
+ - genericized services and build helpers
22
+ - app-shell specific CSS and demo layout components
@@ -0,0 +1,2 @@
1
+ export declare const builtinComponentManifest: readonly [readonly ["loading-spinner", "./components/loading-spinner.js"], readonly ["nc-a", "./components/nc-a.js"], readonly ["nc-accordion-item", "./components/nc-accordion.js"], readonly ["nc-accordion", "./components/nc-accordion.js"], readonly ["nc-alert", "./components/nc-alert.js"], readonly ["nc-animation", "./components/nc-animation.js"], readonly ["nc-autocomplete", "./components/nc-autocomplete.js"], readonly ["nc-avatar", "./components/nc-avatar.js"], readonly ["nc-avatar-group", "./components/nc-avatar-group.js"], readonly ["nc-badge", "./components/nc-badge.js"], readonly ["nc-bottom-nav-item", "./components/nc-bottom-nav.js"], readonly ["nc-bottom-nav", "./components/nc-bottom-nav.js"], readonly ["nc-breadcrumb", "./components/nc-breadcrumb.js"], readonly ["nc-button", "./components/nc-button.js"], readonly ["nc-card", "./components/nc-card.js"], readonly ["nc-checkbox", "./components/nc-checkbox.js"], readonly ["nc-chip", "./components/nc-chip.js"], readonly ["nc-code", "./components/nc-code.js"], readonly ["nc-collapsible", "./components/nc-collapsible.js"], readonly ["nc-color-picker", "./components/nc-color-picker.js"], readonly ["nc-copy-button", "./components/nc-copy-button.js"], readonly ["nc-date-picker", "./components/nc-date-picker.js"], readonly ["nc-div", "./components/nc-div.js"], readonly ["nc-divider", "./components/nc-divider.js"], readonly ["nc-drawer", "./components/nc-drawer.js"], readonly ["nc-dropdown", "./components/nc-dropdown.js"], readonly ["nc-empty-state", "./components/nc-empty-state.js"], readonly ["nc-field", "./components/nc-form.js"], readonly ["nc-file-upload", "./components/nc-file-upload.js"], readonly ["nc-form", "./components/nc-form.js"], readonly ["nc-image", "./components/nc-image.js"], readonly ["nc-input", "./components/nc-input.js"], readonly ["nc-kbd", "./components/nc-kbd.js"], readonly ["nc-menu", "./components/nc-menu.js"], readonly ["nc-menu-item", "./components/nc-menu-item.js"], readonly ["nc-modal", "./components/nc-modal.js"], readonly ["nc-nav-item", "./components/nc-nav-item.js"], readonly ["nc-number-input", "./components/nc-number-input.js"], readonly ["nc-otp-input", "./components/nc-otp-input.js"], readonly ["nc-pagination", "./components/nc-pagination.js"], readonly ["nc-popover", "./components/nc-popover.js"], readonly ["nc-progress", "./components/nc-progress.js"], readonly ["nc-progress-circular", "./components/nc-progress-circular.js"], readonly ["nc-radio", "./components/nc-radio.js"], readonly ["nc-rating", "./components/nc-rating.js"], readonly ["nc-rich-text", "./components/nc-rich-text.js"], readonly ["nc-scroll-top", "./components/nc-scroll-top.js"], readonly ["nc-select", "./components/nc-select.js"], readonly ["nc-skeleton", "./components/nc-skeleton.js"], readonly ["nc-slider", "./components/nc-slider.js"], readonly ["nc-snackbar", "./components/nc-snackbar.js"], readonly ["nc-splash", "./components/nc-splash.js"], readonly ["nc-step", "./components/nc-stepper.js"], readonly ["nc-stepper", "./components/nc-stepper.js"], readonly ["nc-switch", "./components/nc-switch.js"], readonly ["nc-tab-item", "./components/nc-tab-item.js"], readonly ["nc-table", "./components/nc-table.js"], readonly ["nc-tabs", "./components/nc-tabs.js"], readonly ["nc-tag-input", "./components/nc-tag-input.js"], readonly ["nc-textarea", "./components/nc-textarea.js"], readonly ["nc-time-picker", "./components/nc-time-picker.js"], readonly ["nc-timeline-item", "./components/nc-timeline.js"], readonly ["nc-timeline", "./components/nc-timeline.js"], readonly ["nc-tooltip", "./components/nc-tooltip.js"]];
2
+ export declare function registerBuiltinComponents(): void;
@@ -0,0 +1,72 @@
1
+ import { componentRegistry } from '../core/lazyComponents.js';
2
+ export const builtinComponentManifest = [
3
+ ['loading-spinner', './components/loading-spinner.js'],
4
+ ['nc-a', './components/nc-a.js'],
5
+ ['nc-accordion-item', './components/nc-accordion.js'],
6
+ ['nc-accordion', './components/nc-accordion.js'],
7
+ ['nc-alert', './components/nc-alert.js'],
8
+ ['nc-animation', './components/nc-animation.js'],
9
+ ['nc-autocomplete', './components/nc-autocomplete.js'],
10
+ ['nc-avatar', './components/nc-avatar.js'],
11
+ ['nc-avatar-group', './components/nc-avatar-group.js'],
12
+ ['nc-badge', './components/nc-badge.js'],
13
+ ['nc-bottom-nav-item', './components/nc-bottom-nav.js'],
14
+ ['nc-bottom-nav', './components/nc-bottom-nav.js'],
15
+ ['nc-breadcrumb', './components/nc-breadcrumb.js'],
16
+ ['nc-button', './components/nc-button.js'],
17
+ ['nc-card', './components/nc-card.js'],
18
+ ['nc-checkbox', './components/nc-checkbox.js'],
19
+ ['nc-chip', './components/nc-chip.js'],
20
+ ['nc-code', './components/nc-code.js'],
21
+ ['nc-collapsible', './components/nc-collapsible.js'],
22
+ ['nc-color-picker', './components/nc-color-picker.js'],
23
+ ['nc-copy-button', './components/nc-copy-button.js'],
24
+ ['nc-date-picker', './components/nc-date-picker.js'],
25
+ ['nc-div', './components/nc-div.js'],
26
+ ['nc-divider', './components/nc-divider.js'],
27
+ ['nc-drawer', './components/nc-drawer.js'],
28
+ ['nc-dropdown', './components/nc-dropdown.js'],
29
+ ['nc-empty-state', './components/nc-empty-state.js'],
30
+ ['nc-field', './components/nc-form.js'],
31
+ ['nc-file-upload', './components/nc-file-upload.js'],
32
+ ['nc-form', './components/nc-form.js'],
33
+ ['nc-image', './components/nc-image.js'],
34
+ ['nc-input', './components/nc-input.js'],
35
+ ['nc-kbd', './components/nc-kbd.js'],
36
+ ['nc-menu', './components/nc-menu.js'],
37
+ ['nc-menu-item', './components/nc-menu-item.js'],
38
+ ['nc-modal', './components/nc-modal.js'],
39
+ ['nc-nav-item', './components/nc-nav-item.js'],
40
+ ['nc-number-input', './components/nc-number-input.js'],
41
+ ['nc-otp-input', './components/nc-otp-input.js'],
42
+ ['nc-pagination', './components/nc-pagination.js'],
43
+ ['nc-popover', './components/nc-popover.js'],
44
+ ['nc-progress', './components/nc-progress.js'],
45
+ ['nc-progress-circular', './components/nc-progress-circular.js'],
46
+ ['nc-radio', './components/nc-radio.js'],
47
+ ['nc-rating', './components/nc-rating.js'],
48
+ ['nc-rich-text', './components/nc-rich-text.js'],
49
+ ['nc-scroll-top', './components/nc-scroll-top.js'],
50
+ ['nc-select', './components/nc-select.js'],
51
+ ['nc-skeleton', './components/nc-skeleton.js'],
52
+ ['nc-slider', './components/nc-slider.js'],
53
+ ['nc-snackbar', './components/nc-snackbar.js'],
54
+ ['nc-splash', './components/nc-splash.js'],
55
+ ['nc-step', './components/nc-stepper.js'],
56
+ ['nc-stepper', './components/nc-stepper.js'],
57
+ ['nc-switch', './components/nc-switch.js'],
58
+ ['nc-tab-item', './components/nc-tab-item.js'],
59
+ ['nc-table', './components/nc-table.js'],
60
+ ['nc-tabs', './components/nc-tabs.js'],
61
+ ['nc-tag-input', './components/nc-tag-input.js'],
62
+ ['nc-textarea', './components/nc-textarea.js'],
63
+ ['nc-time-picker', './components/nc-time-picker.js'],
64
+ ['nc-timeline-item', './components/nc-timeline.js'],
65
+ ['nc-timeline', './components/nc-timeline.js'],
66
+ ['nc-tooltip', './components/nc-tooltip.js']
67
+ ];
68
+ export function registerBuiltinComponents() {
69
+ builtinComponentManifest.forEach(([tagName, modulePath]) => {
70
+ componentRegistry.register(tagName, modulePath);
71
+ });
72
+ }
@@ -0,0 +1,59 @@
1
+ export { LoadingSpinner } from './loading-spinner.js';
2
+ export { NcA } from './nc-a.js';
3
+ export { NcAccordion, NcAccordionItem } from './nc-accordion.js';
4
+ export { NcAlert } from './nc-alert.js';
5
+ export { NcAnimation } from './nc-animation.js';
6
+ export { NcAutocomplete } from './nc-autocomplete.js';
7
+ export { NcAvatar } from './nc-avatar.js';
8
+ export { NcAvatarGroup } from './nc-avatar-group.js';
9
+ export { NcBadge } from './nc-badge.js';
10
+ export { NcBottomNav, NcBottomNavItem } from './nc-bottom-nav.js';
11
+ export { NcBreadcrumb } from './nc-breadcrumb.js';
12
+ export { NcButton } from './nc-button.js';
13
+ export { NcCard } from './nc-card.js';
14
+ export { NcCheckbox } from './nc-checkbox.js';
15
+ export { NcChip } from './nc-chip.js';
16
+ export { NcCode } from './nc-code.js';
17
+ export { NcCollapsible } from './nc-collapsible.js';
18
+ export { NcColorPicker } from './nc-color-picker.js';
19
+ export { NcCopyButton } from './nc-copy-button.js';
20
+ export { NcDatePicker } from './nc-date-picker.js';
21
+ export { NcDiv } from './nc-div.js';
22
+ export { NcDivider } from './nc-divider.js';
23
+ export { NcDrawer } from './nc-drawer.js';
24
+ export { NcDropdown } from './nc-dropdown.js';
25
+ export { NcEmptyState } from './nc-empty-state.js';
26
+ export { NcField, NcForm } from './nc-form.js';
27
+ export { NcFileUpload } from './nc-file-upload.js';
28
+ export { NcImage } from './nc-image.js';
29
+ export { NcInput } from './nc-input.js';
30
+ export { NcKbd } from './nc-kbd.js';
31
+ export { NcMenu } from './nc-menu.js';
32
+ export { NcMenuItem } from './nc-menu-item.js';
33
+ export { NcModal } from './nc-modal.js';
34
+ export { NcNavItem } from './nc-nav-item.js';
35
+ export { NcNumberInput } from './nc-number-input.js';
36
+ export { NcOtpInput } from './nc-otp-input.js';
37
+ export { NcPagination } from './nc-pagination.js';
38
+ export { NcPopover } from './nc-popover.js';
39
+ export { NcProgress } from './nc-progress.js';
40
+ export { NcProgressCircular } from './nc-progress-circular.js';
41
+ export { NcRadio } from './nc-radio.js';
42
+ export { NcRating } from './nc-rating.js';
43
+ export { NcRichText } from './nc-rich-text.js';
44
+ export { NcScrollTop } from './nc-scroll-top.js';
45
+ export { NcSelect } from './nc-select.js';
46
+ export { NcSkeleton } from './nc-skeleton.js';
47
+ export { NcSlider } from './nc-slider.js';
48
+ export { NcSnackbar } from './nc-snackbar.js';
49
+ export { NcSplash } from './nc-splash.js';
50
+ export { NcStep, NcStepper } from './nc-stepper.js';
51
+ export { NcSwitch } from './nc-switch.js';
52
+ export { NcTabItem } from './nc-tab-item.js';
53
+ export { NcTable } from './nc-table.js';
54
+ export { NcTabs } from './nc-tabs.js';
55
+ export { NcTagInput } from './nc-tag-input.js';
56
+ export { NcTextarea } from './nc-textarea.js';
57
+ export { NcTimePicker } from './nc-time-picker.js';
58
+ export { NcTimeline, NcTimelineItem } from './nc-timeline.js';
59
+ export { NcTooltip } from './nc-tooltip.js';
@@ -0,0 +1,59 @@
1
+ export { LoadingSpinner } from './loading-spinner.js';
2
+ export { NcA } from './nc-a.js';
3
+ export { NcAccordion, NcAccordionItem } from './nc-accordion.js';
4
+ export { NcAlert } from './nc-alert.js';
5
+ export { NcAnimation } from './nc-animation.js';
6
+ export { NcAutocomplete } from './nc-autocomplete.js';
7
+ export { NcAvatar } from './nc-avatar.js';
8
+ export { NcAvatarGroup } from './nc-avatar-group.js';
9
+ export { NcBadge } from './nc-badge.js';
10
+ export { NcBottomNav, NcBottomNavItem } from './nc-bottom-nav.js';
11
+ export { NcBreadcrumb } from './nc-breadcrumb.js';
12
+ export { NcButton } from './nc-button.js';
13
+ export { NcCard } from './nc-card.js';
14
+ export { NcCheckbox } from './nc-checkbox.js';
15
+ export { NcChip } from './nc-chip.js';
16
+ export { NcCode } from './nc-code.js';
17
+ export { NcCollapsible } from './nc-collapsible.js';
18
+ export { NcColorPicker } from './nc-color-picker.js';
19
+ export { NcCopyButton } from './nc-copy-button.js';
20
+ export { NcDatePicker } from './nc-date-picker.js';
21
+ export { NcDiv } from './nc-div.js';
22
+ export { NcDivider } from './nc-divider.js';
23
+ export { NcDrawer } from './nc-drawer.js';
24
+ export { NcDropdown } from './nc-dropdown.js';
25
+ export { NcEmptyState } from './nc-empty-state.js';
26
+ export { NcField, NcForm } from './nc-form.js';
27
+ export { NcFileUpload } from './nc-file-upload.js';
28
+ export { NcImage } from './nc-image.js';
29
+ export { NcInput } from './nc-input.js';
30
+ export { NcKbd } from './nc-kbd.js';
31
+ export { NcMenu } from './nc-menu.js';
32
+ export { NcMenuItem } from './nc-menu-item.js';
33
+ export { NcModal } from './nc-modal.js';
34
+ export { NcNavItem } from './nc-nav-item.js';
35
+ export { NcNumberInput } from './nc-number-input.js';
36
+ export { NcOtpInput } from './nc-otp-input.js';
37
+ export { NcPagination } from './nc-pagination.js';
38
+ export { NcPopover } from './nc-popover.js';
39
+ export { NcProgress } from './nc-progress.js';
40
+ export { NcProgressCircular } from './nc-progress-circular.js';
41
+ export { NcRadio } from './nc-radio.js';
42
+ export { NcRating } from './nc-rating.js';
43
+ export { NcRichText } from './nc-rich-text.js';
44
+ export { NcScrollTop } from './nc-scroll-top.js';
45
+ export { NcSelect } from './nc-select.js';
46
+ export { NcSkeleton } from './nc-skeleton.js';
47
+ export { NcSlider } from './nc-slider.js';
48
+ export { NcSnackbar } from './nc-snackbar.js';
49
+ export { NcSplash } from './nc-splash.js';
50
+ export { NcStep, NcStepper } from './nc-stepper.js';
51
+ export { NcSwitch } from './nc-switch.js';
52
+ export { NcTabItem } from './nc-tab-item.js';
53
+ export { NcTable } from './nc-table.js';
54
+ export { NcTabs } from './nc-tabs.js';
55
+ export { NcTagInput } from './nc-tag-input.js';
56
+ export { NcTextarea } from './nc-textarea.js';
57
+ export { NcTimePicker } from './nc-time-picker.js';
58
+ export { NcTimeline, NcTimelineItem } from './nc-timeline.js';
59
+ export { NcTooltip } from './nc-tooltip.js';
@@ -0,0 +1,5 @@
1
+ import { Component } from '../core/component.js';
2
+ export declare class LoadingSpinner extends Component {
3
+ static get observedAttributes(): string[];
4
+ template(): string;
5
+ }
@@ -0,0 +1,48 @@
1
+ import { Component, defineComponent } from '../core/component.js';
2
+ export class LoadingSpinner extends Component {
3
+ static get observedAttributes() {
4
+ return ['size', 'message'];
5
+ }
6
+ template() {
7
+ const size = this.attr('size', 'medium');
8
+ const message = this.attr('message', 'Loading...');
9
+ const dimension = size === 'small' ? '20px' : size === 'large' ? '40px' : '28px';
10
+ return `
11
+ <style>
12
+ :host {
13
+ display: inline-flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ font-family: var(--nc-font-family);
17
+ }
18
+ .loading-spinner {
19
+ display: inline-flex;
20
+ flex-direction: column;
21
+ align-items: center;
22
+ gap: 0.75rem;
23
+ }
24
+ .spinner {
25
+ width: ${dimension};
26
+ height: ${dimension};
27
+ border-radius: 50%;
28
+ border: 3px solid var(--nc-bg-tertiary, #e5e7eb);
29
+ border-top-color: var(--nc-primary, #10b981);
30
+ animation: nc-spin 0.8s linear infinite;
31
+ }
32
+ .loading-message {
33
+ margin: 0;
34
+ color: var(--nc-text-muted, #6b7280);
35
+ font-size: var(--nc-font-size-sm, 0.875rem);
36
+ }
37
+ @keyframes nc-spin {
38
+ to { transform: rotate(360deg); }
39
+ }
40
+ </style>
41
+ <div class="loading-spinner ${size}">
42
+ <div class="spinner"></div>
43
+ ${message ? `<p class="loading-message">${message}</p>` : ''}
44
+ </div>
45
+ `;
46
+ }
47
+ }
48
+ defineComponent('loading-spinner', LoadingSpinner);
@@ -0,0 +1,45 @@
1
+ /**
2
+ * NativeCore Link/Button Component (nc-a)
3
+ *
4
+ * A semantic <a> element styled as a button. Handles SPA navigation
5
+ * internally so the router's light-DOM event delegation is not needed.
6
+ * External links open normally; internal paths use router.navigate().
7
+ *
8
+ * Attributes:
9
+ * href - Destination path or URL (required for navigation)
10
+ * variant - Visual style (default: 'primary')
11
+ * size - 'sm' | 'md' | 'lg' (default: 'md')
12
+ * disabled - Boolean. Prevents navigation and dims the element.
13
+ * target - '_blank' etc. Passed through to the inner <a>. External links
14
+ * are always handled by the browser (no SPA navigation).
15
+ *
16
+ * Variants:
17
+ * primary, secondary, success, danger, warning, info,
18
+ * outline, ghost, link,
19
+ * hero-primary, hero-ghost
20
+ *
21
+ * Slots:
22
+ * default - Link label / content.
23
+ *
24
+ * Events emitted:
25
+ * nc-navigate - { href } - fires before SPA navigation (cancelable).
26
+ *
27
+ * Usage:
28
+ * <nc-a href="/components" variant="primary">Explore Components</nc-a>
29
+ * <nc-a href="/login" variant="ghost" size="lg">Get Started</nc-a>
30
+ * <nc-a href="https://github.com" target="_blank" variant="link">GitHub</nc-a>
31
+ */
32
+ import { Component } from '../core/component.js';
33
+ export declare class NcA extends Component {
34
+ static useShadowDOM: boolean;
35
+ static attributeOptions: {
36
+ variant: string[];
37
+ size: string[];
38
+ };
39
+ static get observedAttributes(): string[];
40
+ private _onClick;
41
+ template(): string;
42
+ onMount(): void;
43
+ onUnmount(): void;
44
+ attributeChangedCallback(_name: string, oldValue: string | null, newValue: string | null): void;
45
+ }
@@ -0,0 +1,290 @@
1
+ /**
2
+ * NativeCore Link/Button Component (nc-a)
3
+ *
4
+ * A semantic <a> element styled as a button. Handles SPA navigation
5
+ * internally so the router's light-DOM event delegation is not needed.
6
+ * External links open normally; internal paths use router.navigate().
7
+ *
8
+ * Attributes:
9
+ * href - Destination path or URL (required for navigation)
10
+ * variant - Visual style (default: 'primary')
11
+ * size - 'sm' | 'md' | 'lg' (default: 'md')
12
+ * disabled - Boolean. Prevents navigation and dims the element.
13
+ * target - '_blank' etc. Passed through to the inner <a>. External links
14
+ * are always handled by the browser (no SPA navigation).
15
+ *
16
+ * Variants:
17
+ * primary, secondary, success, danger, warning, info,
18
+ * outline, ghost, link,
19
+ * hero-primary, hero-ghost
20
+ *
21
+ * Slots:
22
+ * default - Link label / content.
23
+ *
24
+ * Events emitted:
25
+ * nc-navigate - { href } - fires before SPA navigation (cancelable).
26
+ *
27
+ * Usage:
28
+ * <nc-a href="/components" variant="primary">Explore Components</nc-a>
29
+ * <nc-a href="/login" variant="ghost" size="lg">Get Started</nc-a>
30
+ * <nc-a href="https://github.com" target="_blank" variant="link">GitHub</nc-a>
31
+ */
32
+ import { Component, defineComponent } from '../core/component.js';
33
+ import router from '../core/router.js';
34
+ import { html } from '../utils/templates.js';
35
+ export class NcA extends Component {
36
+ static useShadowDOM = true;
37
+ static attributeOptions = {
38
+ variant: [
39
+ 'primary', 'secondary', 'success', 'danger', 'warning', 'info',
40
+ 'outline', 'ghost', 'link',
41
+ 'hero-primary', 'hero-ghost',
42
+ ],
43
+ size: ['sm', 'md', 'lg'],
44
+ };
45
+ static get observedAttributes() {
46
+ return ['href', 'variant', 'size', 'disabled', 'target'];
47
+ }
48
+ _onClick = null;
49
+ template() {
50
+ const href = this.attr('href', '#');
51
+ const disabled = this.hasAttribute('disabled');
52
+ const target = this.attr('target', '');
53
+ const targetAttr = target ? `target="${target}" rel="noopener noreferrer"` : '';
54
+ return html `
55
+ <style>
56
+ :host {
57
+ display: inline-block;
58
+ width: var(--nc-a-host-width, auto);
59
+ }
60
+
61
+ a {
62
+ display: inline-flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ gap: var(--nc-spacing-xs);
66
+ font-family: var(--nc-font-family);
67
+ font-weight: var(--nc-font-weight-semibold);
68
+ text-decoration: none;
69
+ border: none;
70
+ border-radius: var(--nc-radius-md);
71
+ cursor: pointer;
72
+ transition:
73
+ background var(--nc-transition-fast),
74
+ color var(--nc-transition-fast),
75
+ box-shadow var(--nc-transition-fast),
76
+ transform var(--nc-transition-fast),
77
+ border-color var(--nc-transition-fast);
78
+ white-space: nowrap;
79
+ user-select: none;
80
+ box-sizing: border-box;
81
+ outline: none;
82
+ width: var(--nc-a-width, auto);
83
+
84
+ /* default size: md */
85
+ padding: var(--nc-spacing-sm) var(--nc-spacing-xl);
86
+ font-size: var(--nc-font-size-base);
87
+ min-height: 40px;
88
+
89
+ /* default variant: primary */
90
+ background: var(--nc-primary);
91
+ color: var(--nc-white);
92
+ }
93
+
94
+ a:focus-visible {
95
+ outline: 2px solid var(--nc-primary);
96
+ outline-offset: 2px;
97
+ }
98
+
99
+ /* ── Sizes ─────────────────────────────────────────────────── */
100
+ :host([size="sm"]) a {
101
+ padding: var(--nc-spacing-xs) var(--nc-spacing-lg);
102
+ font-size: var(--nc-font-size-sm);
103
+ min-height: 32px;
104
+ }
105
+
106
+ :host([size="lg"]) a {
107
+ padding: var(--nc-spacing-md) var(--nc-spacing-2xl);
108
+ font-size: var(--nc-font-size-lg);
109
+ min-height: 48px;
110
+ }
111
+
112
+ /* ── Variants ──────────────────────────────────────────────── */
113
+ :host([variant="primary"]) a {
114
+ background: var(--nc-primary);
115
+ color: var(--nc-white);
116
+ box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3);
117
+ }
118
+ :host([variant="primary"]) a:hover {
119
+ background: var(--nc-primary-dark);
120
+ transform: translateY(-1px);
121
+ box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);
122
+ }
123
+
124
+ :host([variant="secondary"]) a {
125
+ background: var(--nc-gray-200);
126
+ color: var(--nc-text);
127
+ }
128
+ :host([variant="secondary"]) a:hover {
129
+ background: var(--nc-gray-300);
130
+ transform: translateY(-1px);
131
+ }
132
+
133
+ :host([variant="success"]) a {
134
+ background: var(--nc-success);
135
+ color: var(--nc-white);
136
+ box-shadow: var(--nc-shadow-success);
137
+ }
138
+ :host([variant="success"]) a:hover {
139
+ background: var(--nc-success-dark);
140
+ transform: translateY(-1px);
141
+ }
142
+
143
+ :host([variant="danger"]) a {
144
+ background: var(--nc-danger);
145
+ color: var(--nc-white);
146
+ box-shadow: var(--nc-shadow-danger);
147
+ }
148
+ :host([variant="danger"]) a:hover {
149
+ background: var(--nc-danger-dark);
150
+ transform: translateY(-1px);
151
+ }
152
+
153
+ :host([variant="warning"]) a {
154
+ background: var(--nc-warning);
155
+ color: var(--nc-white);
156
+ }
157
+ :host([variant="warning"]) a:hover {
158
+ background: var(--nc-warning-dark);
159
+ transform: translateY(-1px);
160
+ }
161
+
162
+ :host([variant="info"]) a {
163
+ background: var(--nc-info);
164
+ color: var(--nc-white);
165
+ }
166
+ :host([variant="info"]) a:hover {
167
+ background: var(--nc-info-dark);
168
+ transform: translateY(-1px);
169
+ }
170
+
171
+ :host([variant="outline"]) a {
172
+ background: transparent;
173
+ color: var(--nc-primary);
174
+ border: 2px solid var(--nc-primary);
175
+ }
176
+ :host([variant="outline"]) a:hover {
177
+ background: var(--nc-primary);
178
+ color: var(--nc-white);
179
+ transform: translateY(-1px);
180
+ }
181
+
182
+ :host([variant="ghost"]) a {
183
+ background: transparent;
184
+ color: var(--nc-text);
185
+ border: 2px solid var(--nc-border-dark);
186
+ }
187
+ :host([variant="ghost"]) a:hover {
188
+ background: var(--nc-bg-tertiary);
189
+ transform: translateY(-1px);
190
+ }
191
+
192
+ :host([variant="link"]) a {
193
+ background: transparent;
194
+ color: var(--nc-primary);
195
+ padding-left: 0;
196
+ padding-right: 0;
197
+ min-height: unset;
198
+ text-decoration: underline;
199
+ text-underline-offset: 3px;
200
+ }
201
+ :host([variant="link"]) a:hover {
202
+ color: var(--nc-primary-dark);
203
+ }
204
+
205
+ /* ── Hero variants (landing page CTA style) ─────────────────── */
206
+ :host([variant="hero-primary"]) a {
207
+ background: var(--nc-primary);
208
+ color: var(--nc-white);
209
+ padding: var(--nc-spacing-md) var(--nc-spacing-2xl);
210
+ font-size: var(--nc-font-size-lg);
211
+ min-height: 52px;
212
+ border-radius: var(--nc-radius-full);
213
+ box-shadow: 0 4px 20px rgba(16, 185, 129, 0.4);
214
+ }
215
+ :host([variant="hero-primary"]) a:hover {
216
+ background: var(--nc-primary-dark);
217
+ transform: translateY(-2px);
218
+ box-shadow: 0 8px 28px rgba(16, 185, 129, 0.5);
219
+ }
220
+
221
+ :host([variant="hero-ghost"]) a {
222
+ background: transparent;
223
+ color: var(--nc-white);
224
+ padding: var(--nc-spacing-md) var(--nc-spacing-2xl);
225
+ font-size: var(--nc-font-size-lg);
226
+ min-height: 52px;
227
+ border-radius: var(--nc-radius-full);
228
+ border: 2px solid rgba(255, 255, 255, 0.4);
229
+ }
230
+ :host([variant="hero-ghost"]) a:hover {
231
+ background: rgba(255, 255, 255, 0.1);
232
+ border-color: rgba(255, 255, 255, 0.7);
233
+ transform: translateY(-2px);
234
+ }
235
+
236
+ /* ── Disabled ────────────────────────────────────────────────── */
237
+ :host([disabled]) a {
238
+ opacity: 0.45;
239
+ cursor: not-allowed;
240
+ pointer-events: none;
241
+ transform: none !important;
242
+ box-shadow: none !important;
243
+ }
244
+ </style>
245
+ <a href="${href}" ${targetAttr} aria-disabled="${disabled}" role="link">
246
+ <slot></slot>
247
+ </a>
248
+ `;
249
+ }
250
+ onMount() {
251
+ this._onClick = (e) => {
252
+ if (this.hasAttribute('disabled')) {
253
+ e.preventDefault();
254
+ return;
255
+ }
256
+ const href = this.attr('href', '');
257
+ const target = this.attr('target', '');
258
+ if (!href)
259
+ return;
260
+ // External links, hash links, or explicit target - let the browser handle
261
+ if (href.startsWith('http://') ||
262
+ href.startsWith('https://') ||
263
+ href.startsWith('mailto:') ||
264
+ href.startsWith('tel:') ||
265
+ href.startsWith('#') ||
266
+ target === '_blank') {
267
+ return; // don't prevent default
268
+ }
269
+ // SPA navigation
270
+ e.preventDefault();
271
+ const cancelled = !this.emitEvent('nc-navigate', { href }, { cancelable: true });
272
+ if (cancelled)
273
+ return;
274
+ router.navigate(href);
275
+ };
276
+ this.shadowRoot.addEventListener('click', this._onClick);
277
+ }
278
+ onUnmount() {
279
+ if (this._onClick) {
280
+ this.shadowRoot?.removeEventListener('click', this._onClick);
281
+ this._onClick = null;
282
+ }
283
+ }
284
+ attributeChangedCallback(_name, oldValue, newValue) {
285
+ if (this._mounted && oldValue !== newValue) {
286
+ this.render();
287
+ }
288
+ }
289
+ }
290
+ defineComponent('nc-a', NcA);
@@ -0,0 +1,36 @@
1
+ /**
2
+ * NcAccordion + NcAccordionItem Components
3
+ *
4
+ * nc-accordion:
5
+ * - multiple: boolean - allow multiple items open simultaneously
6
+ * - variant: 'default'|'bordered'|'flush' (default: 'default')
7
+ *
8
+ * nc-accordion-item:
9
+ * - header: string - header text (or use slot[name="header"])
10
+ * - open: boolean - expanded state
11
+ * - disabled: boolean
12
+ *
13
+ * Events (on nc-accordion-item):
14
+ * - toggle: CustomEvent<{ open: boolean }>
15
+ *
16
+ * Usage:
17
+ * <nc-accordion>
18
+ * <nc-accordion-item header="Section 1" open>Content here</nc-accordion-item>
19
+ * <nc-accordion-item header="Section 2">More content</nc-accordion-item>
20
+ * </nc-accordion>
21
+ */
22
+ import { Component } from '../core/component.js';
23
+ export declare class NcAccordionItem extends Component {
24
+ static useShadowDOM: boolean;
25
+ static get observedAttributes(): string[];
26
+ template(): string;
27
+ onMount(): void;
28
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
29
+ }
30
+ export declare class NcAccordion extends Component {
31
+ static useShadowDOM: boolean;
32
+ static get observedAttributes(): string[];
33
+ template(): string;
34
+ onMount(): void;
35
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
36
+ }