@aotearoan/neon 28.5.0 → 28.6.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 (92) hide show
  1. package/dist/components/layout/basic-layout/NeonBasicLayout.cjs.js +2 -0
  2. package/dist/components/layout/basic-layout/NeonBasicLayout.cjs.js.map +1 -0
  3. package/dist/components/layout/basic-layout/NeonBasicLayout.es.js +40 -0
  4. package/dist/components/layout/basic-layout/NeonBasicLayout.es.js.map +1 -0
  5. package/dist/components/layout/basic-layout/NeonBasicLayout.vue.cjs.js +2 -0
  6. package/dist/components/layout/basic-layout/NeonBasicLayout.vue.cjs.js.map +1 -0
  7. package/dist/components/layout/basic-layout/NeonBasicLayout.vue.es.js +41 -0
  8. package/dist/components/layout/basic-layout/NeonBasicLayout.vue.es.js.map +1 -0
  9. package/dist/components/layout/card-list/NeonCardList.cjs.js +1 -1
  10. package/dist/components/layout/card-list/NeonCardList.cjs.js.map +1 -1
  11. package/dist/components/layout/card-list/NeonCardList.es.js +47 -45
  12. package/dist/components/layout/card-list/NeonCardList.es.js.map +1 -1
  13. package/dist/components/layout/card-list/NeonCardList.vue.cjs.js +1 -1
  14. package/dist/components/layout/card-list/NeonCardList.vue.cjs.js.map +1 -1
  15. package/dist/components/layout/card-list/NeonCardList.vue.es.js +48 -50
  16. package/dist/components/layout/card-list/NeonCardList.vue.es.js.map +1 -1
  17. package/dist/components/layout/list-layout/NeonListLayout.cjs.js +1 -1
  18. package/dist/components/layout/list-layout/NeonListLayout.cjs.js.map +1 -1
  19. package/dist/components/layout/list-layout/NeonListLayout.es.js +16 -11
  20. package/dist/components/layout/list-layout/NeonListLayout.es.js.map +1 -1
  21. package/dist/components/layout/list-layout/NeonListLayout.vue.cjs.js +1 -1
  22. package/dist/components/layout/list-layout/NeonListLayout.vue.cjs.js.map +1 -1
  23. package/dist/components/layout/list-layout/NeonListLayout.vue.es.js +10 -9
  24. package/dist/components/layout/list-layout/NeonListLayout.vue.es.js.map +1 -1
  25. package/dist/components/presentation/avatar/NeonAvatar.cjs.js +2 -0
  26. package/dist/components/presentation/avatar/NeonAvatar.cjs.js.map +1 -0
  27. package/dist/components/presentation/avatar/NeonAvatar.es.js +66 -0
  28. package/dist/components/presentation/avatar/NeonAvatar.es.js.map +1 -0
  29. package/dist/components/presentation/avatar/NeonAvatar.vue.cjs.js +2 -0
  30. package/dist/components/presentation/avatar/NeonAvatar.vue.cjs.js.map +1 -0
  31. package/dist/components/presentation/avatar/NeonAvatar.vue.es.js +25 -0
  32. package/dist/components/presentation/avatar/NeonAvatar.vue.es.js.map +1 -0
  33. package/dist/components/presentation/header/NeonHeader.vue.cjs.js +1 -1
  34. package/dist/components/presentation/header/NeonHeader.vue.cjs.js.map +1 -1
  35. package/dist/components/presentation/header/NeonHeader.vue.es.js +31 -29
  36. package/dist/components/presentation/header/NeonHeader.vue.es.js.map +1 -1
  37. package/dist/model/layout/card-list/NeonCardListStyle.cjs.js +2 -0
  38. package/dist/model/layout/card-list/NeonCardListStyle.cjs.js.map +1 -0
  39. package/dist/model/layout/card-list/NeonCardListStyle.es.js +5 -0
  40. package/dist/model/layout/card-list/NeonCardListStyle.es.js.map +1 -0
  41. package/dist/model/presentation/badge/NeonBadgeSize.cjs.js +1 -1
  42. package/dist/model/presentation/badge/NeonBadgeSize.cjs.js.map +1 -1
  43. package/dist/model/presentation/badge/NeonBadgeSize.es.js +1 -1
  44. package/dist/model/presentation/badge/NeonBadgeSize.es.js.map +1 -1
  45. package/dist/neon.cjs.js +1 -1
  46. package/dist/neon.es.js +265 -259
  47. package/dist/neon.es.js.map +1 -1
  48. package/dist/src/components/layout/basic-layout/NeonBasicLayout.d.ts +427 -0
  49. package/dist/src/components/layout/basic-layout/NeonBasicLayout.vue.d.ts +2 -0
  50. package/dist/src/components/layout/card-list/NeonCardList.d.ts +47 -60
  51. package/dist/src/components/layout/list-layout/NeonListLayout.d.ts +304 -250
  52. package/dist/src/components/presentation/avatar/NeonAvatar.d.ts +1806 -0
  53. package/dist/src/components/presentation/avatar/NeonAvatar.vue.d.ts +2 -0
  54. package/dist/src/model/layout/card-list/NeonCardListStyle.d.ts +13 -0
  55. package/dist/src/model/layout/card-list/NeonLoadOnDemandModel.d.ts +4 -8
  56. package/dist/src/model/presentation/badge/NeonBadgeSize.d.ts +3 -1
  57. package/dist/src/neon.d.ts +4 -1
  58. package/dist/src/utils/common/http/NeonHttpUtils.d.ts +23 -0
  59. package/dist/utils/common/http/NeonHttpUtils.cjs.js +2 -0
  60. package/dist/utils/common/http/NeonHttpUtils.cjs.js.map +1 -0
  61. package/dist/utils/common/http/NeonHttpUtils.es.js +31 -0
  62. package/dist/utils/common/http/NeonHttpUtils.es.js.map +1 -0
  63. package/package.json +1 -1
  64. package/src/sass/components/_badge.scss +2 -2
  65. package/src/sass/components/{_page-container.scss → _basic-layout.scss} +12 -33
  66. package/src/sass/components/_card-list.scss +30 -5
  67. package/src/sass/components/_date-picker.scss +2 -0
  68. package/src/sass/components/_drawer.scss +1 -0
  69. package/src/sass/components/_field-group.scss +5 -1
  70. package/src/sass/components/_header.scss +2 -1
  71. package/src/sass/components/_input.scss +6 -0
  72. package/src/sass/components/_link.scss +1 -0
  73. package/src/sass/components/_modal.scss +1 -0
  74. package/src/sass/components/_page.scss +1 -0
  75. package/src/sass/components/_range-slider.scss +4 -0
  76. package/src/sass/components/_sticky-buttons.scss +1 -1
  77. package/src/sass/components/components.scss +1 -1
  78. package/src/sass/includes/_dependencies.scss +1 -1
  79. package/src/sass/theme.scss +4 -4
  80. package/src/sass/variables-dark.scss +7 -0
  81. package/src/sass/variables-global.scss +21 -7
  82. package/src/sass/variables-light.scss +7 -0
  83. package/dist/components/layout/page-container/NeonPageContainer.cjs.js +0 -2
  84. package/dist/components/layout/page-container/NeonPageContainer.cjs.js.map +0 -1
  85. package/dist/components/layout/page-container/NeonPageContainer.es.js +0 -26
  86. package/dist/components/layout/page-container/NeonPageContainer.es.js.map +0 -1
  87. package/dist/components/layout/page-container/NeonPageContainer.vue.cjs.js +0 -2
  88. package/dist/components/layout/page-container/NeonPageContainer.vue.cjs.js.map +0 -1
  89. package/dist/components/layout/page-container/NeonPageContainer.vue.es.js +0 -31
  90. package/dist/components/layout/page-container/NeonPageContainer.vue.es.js.map +0 -1
  91. package/dist/src/components/layout/page-container/NeonPageContainer.d.ts +0 -98
  92. package/dist/src/components/layout/page-container/NeonPageContainer.vue.d.ts +0 -2
@@ -0,0 +1,2 @@
1
+ export * from './NeonAvatar.js';
2
+ export { default } from './NeonAvatar.js';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Defines the style of card list to render
3
+ */
4
+ export declare enum NeonCardListStyle {
5
+ /**
6
+ * Render the card list as a list of rows
7
+ */
8
+ List = "list",
9
+ /**
10
+ * Render the card list as a grid of items with a number of responsive columns.
11
+ */
12
+ Grid = "grid"
13
+ }
@@ -3,20 +3,16 @@
3
3
  */
4
4
  export interface NeonLoadOnDemandModel {
5
5
  /**
6
- * The total item count of records including those not displayed. This is used to display the 'x' of 'y'
6
+ * The total item count of records including those not displayed. This is used to display the 'Showing x of y'
7
7
  * text.
8
8
  */
9
9
  total: number;
10
10
  /**
11
- * override the default 'x of y' text.
11
+ * override the default 'Showing x of y' text.
12
12
  */
13
- ofLabel?: string;
13
+ resultCountLabel?: string;
14
14
  /**
15
- * override the 'Show more' text.
15
+ * override the 'Load more' text.
16
16
  */
17
17
  showMoreLabel?: string;
18
- /**
19
- * override the 'End of results' text.
20
- */
21
- endOfResultsLabel?: string;
22
18
  }
@@ -12,5 +12,7 @@ export declare enum NeonBadgeSize {
12
12
  /** An extra large badge size, typically has a default of 64 rem. */
13
13
  ExtraLarge = "xl",
14
14
  /** An extra, extra large badge size, typically has a default of 80 rem. */
15
- ExtraExtraLarge = "xxl"
15
+ ExtraExtraLarge = "xxl",
16
+ /** An extra, extra, extra large badge size, typically has a default of 288 rem. */
17
+ ExtraExtraExtraLarge = "xxxl"
16
18
  }
@@ -2,8 +2,10 @@ export { default as NeonActionMenu } from './components/navigation/action-menu/N
2
2
  export { default as NeonAlert } from './components/feedback/alert/NeonAlert.vue';
3
3
  export { default as NeonAlertContainer } from './components/feedback/alert/container/NeonAlertContainer.vue';
4
4
  export { default as NeonAnchor } from './components/navigation/anchor/NeonAnchor.vue';
5
+ export { default as NeonAvatar } from './components/presentation/avatar/NeonAvatar.vue';
5
6
  export { default as NeonBadge } from './components/presentation/badge/NeonBadge.vue';
6
7
  export { default as NeonBanner } from './components/feedback/banner/NeonBanner.vue';
8
+ export { default as NeonBasicLayout } from './components/layout/basic-layout/NeonBasicLayout.vue';
7
9
  export { default as NeonBreadcrumbs } from './components/navigation/breadcrumbs/NeonBreadcrumbs.vue';
8
10
  export { default as NeonButton } from './components/user-input/button/NeonButton.vue';
9
11
  export { default as NeonCard } from './components/layout/card/NeonCard.vue';
@@ -52,7 +54,6 @@ export { default as NeonNote } from './components/feedback/note/NeonNote.vue';
52
54
  export { default as NeonNotificationCounter } from './components/feedback/notification-counter/NeonNotificationCounter.vue';
53
55
  export { default as NeonNumber } from './components/user-input/number/NeonNumber.vue';
54
56
  export { default as NeonPage } from './components/layout/page/NeonPage.vue';
55
- export { default as NeonPageContainer } from './components/layout/page-container/NeonPageContainer.vue';
56
57
  export { default as NeonPagination } from './components/navigation/pagination/NeonPagination.vue';
57
58
  export { default as NeonPassword } from './components/user-input/password/NeonPassword.vue';
58
59
  export { default as NeonRangeSlider } from './components/user-input/range-slider/NeonRangeSlider.vue';
@@ -94,6 +95,7 @@ export { NeonButtonSize } from '@/model/user-input/button/NeonButtonSize';
94
95
  export { NeonButtonStyle } from '@/model/user-input/button/NeonButtonStyle';
95
96
  export { NeonButtonType } from '@/model/user-input/button/NeonButtonType';
96
97
  export type { NeonCardListModel } from '@/model/layout/card-list/NeonCardListModel';
98
+ export { NeonCardListStyle } from './model/layout/card-list/NeonCardListStyle';
97
99
  export type { NeonCarouselImage } from '@/model/presentation/image-carousel/NeonCarouselImage';
98
100
  export { NeonChipAction } from '@/model/user-input/chip/NeonChipAction';
99
101
  export type { NeonContrastAccessibility } from '@/model/common/color/NeonContrastAccessibility';
@@ -159,6 +161,7 @@ export { NeonDialogService } from './utils/feedback/dialog/NeonDialogService';
159
161
  export { NeonDropdownPlacementUtils } from '@/utils/presentation/dropdown/NeonDropdownPlacementUtils';
160
162
  export { NeonEventBus } from '@/utils/common/event/NeonEventBus';
161
163
  export { fileToDataURL } from '@/utils/user-input/file/NeonFileUtils';
164
+ export { NeonHttpUtils } from './utils/common/http/NeonHttpUtils';
162
165
  export { NeonIconRegistry } from '@/utils/common/icons/NeonIconRegistry';
163
166
  export { NeonJazziconUtils } from '@/utils/presentation/badge/NeonJazziconUtils';
164
167
  export { NeonModeUtils } from '@/utils/common/color/NeonModeUtils';
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Utilities for handling HTTP operations such as URL construction and parameter encoding.
3
+ */
4
+ export declare class NeonHttpUtils {
5
+ /**
6
+ * Constructs a URL with query parameters by appending encoded query parameters to a base URL.
7
+ *
8
+ * @param baseUrl The base URL to which query parameters will be appended.
9
+ * @param params Object containing key-value pairs to be encoded as query parameters.
10
+ * Values can be primitives or arrays of primitives which will be joined by commas.
11
+ *
12
+ * @returns A URL with encoded query parameters appended. If there are no parameters, returns the base URL.
13
+ */
14
+ static urlWithQueryParams(baseUrl: string, params?: object): string;
15
+ /**
16
+ * Encodes an object of key value pairs to a query string
17
+ * @param params - object of key value pairs where the values must either be primitives or a list of primitives which
18
+ * will be joined by commas
19
+ *
20
+ * @returns An encoded query string without the leading '?'
21
+ */
22
+ static encodeObjectToHttpQueryParams(params?: object): string;
23
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class n{static urlWithQueryParams(r,t={}){const e=n.encodeObjectToHttpQueryParams(t);return e.length>0?`${r}?${e}`:r}static encodeObjectToHttpQueryParams(r={}){return Object.entries(r).filter(([,t])=>t!=null&&t!==""&&!(Array.isArray(t)&&t.length===0)).map(([t,e])=>Array.isArray(e)?`${encodeURIComponent(t)}=${e.map(o=>encodeURIComponent(o)).join(",")}`:`${encodeURIComponent(t)}=${encodeURIComponent(e)}`).join("&")}}exports.NeonHttpUtils=n;
2
+ //# sourceMappingURL=NeonHttpUtils.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonHttpUtils.cjs.js","sources":["../../../../src/utils/common/http/NeonHttpUtils.ts"],"sourcesContent":["/**\n * Utilities for handling HTTP operations such as URL construction and parameter encoding.\n */\nexport class NeonHttpUtils {\n /**\n * Constructs a URL with query parameters by appending encoded query parameters to a base URL.\n *\n * @param baseUrl The base URL to which query parameters will be appended.\n * @param params Object containing key-value pairs to be encoded as query parameters.\n * Values can be primitives or arrays of primitives which will be joined by commas.\n *\n * @returns A URL with encoded query parameters appended. If there are no parameters, returns the base URL.\n */\n public static urlWithQueryParams(baseUrl: string, params: object = {}) {\n const queryString = NeonHttpUtils.encodeObjectToHttpQueryParams(params);\n return queryString.length > 0 ? `${baseUrl}?${queryString}` : baseUrl;\n }\n\n /**\n * Encodes an object of key value pairs to a query string\n * @param params - object of key value pairs where the values must either be primitives or a list of primitives which\n * will be joined by commas\n *\n * @returns An encoded query string without the leading '?'\n */\n public static encodeObjectToHttpQueryParams(params: object = {}) {\n return Object.entries(params)\n .filter(\n ([, value]) =>\n value !== undefined && value !== null && value !== '' && !(Array.isArray(value) && value.length === 0),\n )\n .map(([key, value]) => {\n if (Array.isArray(value)) {\n return `${encodeURIComponent(key)}=${value.map((v) => encodeURIComponent(v)).join(',')}`;\n }\n\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n })\n .join('&');\n }\n}\n"],"names":["NeonHttpUtils","baseUrl","params","queryString","value","key","v"],"mappings":"gFAGO,MAAMA,CAAc,CAUzB,OAAc,mBAAmBC,EAAiBC,EAAiB,GAAI,CACrE,MAAMC,EAAcH,EAAc,8BAA8BE,CAAM,EACtE,OAAOC,EAAY,OAAS,EAAI,GAAGF,CAAO,IAAIE,CAAW,GAAKF,CAChE,CASA,OAAc,8BAA8BC,EAAiB,GAAI,CAC/D,OAAO,OAAO,QAAQA,CAAM,EACzB,OACC,CAAC,CAAA,CAAGE,CAAK,IACgBA,GAAU,MAAQA,IAAU,IAAM,EAAE,MAAM,QAAQA,CAAK,GAAKA,EAAM,SAAW,EAAA,EAEvG,IAAI,CAAC,CAACC,EAAKD,CAAK,IACX,MAAM,QAAQA,CAAK,EACd,GAAG,mBAAmBC,CAAG,CAAC,IAAID,EAAM,IAAKE,GAAM,mBAAmBA,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAGjF,GAAG,mBAAmBD,CAAG,CAAC,IAAI,mBAAmBD,CAAK,CAAC,EAC/D,EACA,KAAK,GAAG,CACb,CACF"}
@@ -0,0 +1,31 @@
1
+ class e {
2
+ /**
3
+ * Constructs a URL with query parameters by appending encoded query parameters to a base URL.
4
+ *
5
+ * @param baseUrl The base URL to which query parameters will be appended.
6
+ * @param params Object containing key-value pairs to be encoded as query parameters.
7
+ * Values can be primitives or arrays of primitives which will be joined by commas.
8
+ *
9
+ * @returns A URL with encoded query parameters appended. If there are no parameters, returns the base URL.
10
+ */
11
+ static urlWithQueryParams(n, r = {}) {
12
+ const t = e.encodeObjectToHttpQueryParams(r);
13
+ return t.length > 0 ? `${n}?${t}` : n;
14
+ }
15
+ /**
16
+ * Encodes an object of key value pairs to a query string
17
+ * @param params - object of key value pairs where the values must either be primitives or a list of primitives which
18
+ * will be joined by commas
19
+ *
20
+ * @returns An encoded query string without the leading '?'
21
+ */
22
+ static encodeObjectToHttpQueryParams(n = {}) {
23
+ return Object.entries(n).filter(
24
+ ([, r]) => r != null && r !== "" && !(Array.isArray(r) && r.length === 0)
25
+ ).map(([r, t]) => Array.isArray(t) ? `${encodeURIComponent(r)}=${t.map((o) => encodeURIComponent(o)).join(",")}` : `${encodeURIComponent(r)}=${encodeURIComponent(t)}`).join("&");
26
+ }
27
+ }
28
+ export {
29
+ e as NeonHttpUtils
30
+ };
31
+ //# sourceMappingURL=NeonHttpUtils.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonHttpUtils.es.js","sources":["../../../../src/utils/common/http/NeonHttpUtils.ts"],"sourcesContent":["/**\n * Utilities for handling HTTP operations such as URL construction and parameter encoding.\n */\nexport class NeonHttpUtils {\n /**\n * Constructs a URL with query parameters by appending encoded query parameters to a base URL.\n *\n * @param baseUrl The base URL to which query parameters will be appended.\n * @param params Object containing key-value pairs to be encoded as query parameters.\n * Values can be primitives or arrays of primitives which will be joined by commas.\n *\n * @returns A URL with encoded query parameters appended. If there are no parameters, returns the base URL.\n */\n public static urlWithQueryParams(baseUrl: string, params: object = {}) {\n const queryString = NeonHttpUtils.encodeObjectToHttpQueryParams(params);\n return queryString.length > 0 ? `${baseUrl}?${queryString}` : baseUrl;\n }\n\n /**\n * Encodes an object of key value pairs to a query string\n * @param params - object of key value pairs where the values must either be primitives or a list of primitives which\n * will be joined by commas\n *\n * @returns An encoded query string without the leading '?'\n */\n public static encodeObjectToHttpQueryParams(params: object = {}) {\n return Object.entries(params)\n .filter(\n ([, value]) =>\n value !== undefined && value !== null && value !== '' && !(Array.isArray(value) && value.length === 0),\n )\n .map(([key, value]) => {\n if (Array.isArray(value)) {\n return `${encodeURIComponent(key)}=${value.map((v) => encodeURIComponent(v)).join(',')}`;\n }\n\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n })\n .join('&');\n }\n}\n"],"names":["NeonHttpUtils","baseUrl","params","queryString","value","key","v"],"mappings":"AAGO,MAAMA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUzB,OAAc,mBAAmBC,GAAiBC,IAAiB,IAAI;AACrE,UAAMC,IAAcH,EAAc,8BAA8BE,CAAM;AACtE,WAAOC,EAAY,SAAS,IAAI,GAAGF,CAAO,IAAIE,CAAW,KAAKF;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAc,8BAA8BC,IAAiB,IAAI;AAC/D,WAAO,OAAO,QAAQA,CAAM,EACzB;AAAA,MACC,CAAC,CAAA,EAAGE,CAAK,MACgBA,KAAU,QAAQA,MAAU,MAAM,EAAE,MAAM,QAAQA,CAAK,KAAKA,EAAM,WAAW;AAAA,IAAA,EAEvG,IAAI,CAAC,CAACC,GAAKD,CAAK,MACX,MAAM,QAAQA,CAAK,IACd,GAAG,mBAAmBC,CAAG,CAAC,IAAID,EAAM,IAAI,CAACE,MAAM,mBAAmBA,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,KAGjF,GAAG,mBAAmBD,CAAG,CAAC,IAAI,mBAAmBD,CAAK,CAAC,EAC/D,EACA,KAAK,GAAG;AAAA,EACb;AACF;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aotearoan/neon",
3
3
  "description": "Neon is a lightweight design library of Vue 3 components with minimal dependencies.",
4
- "version": "28.5.0",
4
+ "version": "28.6.0",
5
5
  "main": "./dist/neon.cjs.js",
6
6
  "module": "./dist/neon.es.js",
7
7
  "types": "./dist/src/neon.d.ts",
@@ -112,7 +112,7 @@
112
112
  }
113
113
  }
114
114
 
115
- $neon-badge-sizes: (s, m, l, xl, xxl);
115
+ $neon-badge-sizes: (s, m, l, xl, xxl, xxxl);
116
116
 
117
117
  @each $badge-size in $neon-badge-sizes {
118
118
  &--#{$badge-size} {
@@ -152,7 +152,7 @@
152
152
  &--square {
153
153
  &,
154
154
  .neon-badge__image {
155
- border-radius: var(--neon-border-radius);
155
+ border-radius: var(--neon-border-radius-badge);
156
156
  }
157
157
  }
158
158
 
@@ -1,70 +1,49 @@
1
- @use '../includes/layout';
2
1
  @use '../includes/responsive';
3
- @use '../includes/svg';
4
2
 
5
- @mixin page-container {
6
- .neon-page-container {
3
+ @mixin basic-layout {
4
+ .neon-basic-layout {
7
5
  position: relative;
8
6
  padding-bottom: calc(var(--neon-space-20) + var(--neon-height-mobile-menu) + var(--neon-border-width));
9
- gap: var(--neon-gutter);
10
7
  width: 100%;
11
8
  max-width: 100%;
12
9
  flex: 1 0 auto;
13
10
 
14
- &.neon-page-container--with-sticky-buttons {
11
+ .neon-basic-layout__container {
12
+ gap: var(--neon-gutter);
13
+ }
14
+
15
+ &.neon-basic-layout--with-sticky-buttons {
15
16
  padding-bottom: calc(
16
- var(--neon-height-page-container-sticky-buttons) + var(--neon-space-20) + var(--neon-height-mobile-menu) +
17
+ var(--neon-height-basic-layout-sticky-buttons) + var(--neon-space-20) + var(--neon-height-mobile-menu) +
17
18
  var(--neon-height-mobile-menu-indicator)
18
19
  );
19
20
  }
20
-
21
- &__header {
22
- display: flex;
23
- flex-direction: row;
24
- align-items: center;
25
- justify-content: space-between;
26
- padding-top: calc(1.25 * var(--neon-gutter));
27
- }
28
-
29
- h1 {
30
- margin-bottom: 0;
31
- }
32
-
33
- @include responsive.responsive(larger-than-mobile-large) {
34
- padding-bottom: var(--neon-space-96);
35
- }
36
21
  }
37
22
 
38
23
  /* All min-height logic */
39
24
  @include responsive.responsive(larger-than-mobile-large) {
40
25
  .neon-page--with-footer {
41
- .neon-page-container {
26
+ .neon-basic-layout {
42
27
  min-height: calc(100% - (var(--neon-footer-height) + var(--neon-border-width-footer) + var(--neon-top-nav-height)));
43
28
  }
44
29
  }
45
30
  }
46
31
 
47
32
  @include responsive.responsive(tablet) {
48
- .neon-page-container {
33
+ .neon-basic-layout {
49
34
  max-width: 100%;
50
35
  }
51
36
  }
52
37
 
53
38
  @include responsive.responsive(mobile-large) {
54
- .neon-page-container {
39
+ .neon-basic-layout {
55
40
  min-height: 100%;
56
-
57
- &--hide-nav {
58
- min-height: 100%;
59
- --neon-height-mobile-menu: 0rem;
60
- --neon-height-mobile-menu-indicator: 0rem;
61
- }
62
41
  }
63
42
  }
64
43
 
65
44
  .neon-page--left.neon-page--with-side-nav {
66
45
  @include responsive.responsive(larger-than-tablet) {
67
- .neon-page-container {
46
+ .neon-basic-layout {
68
47
  max-width: calc(100% - 2 * var(--neon-gutter));
69
48
  margin-left: var(--neon-gutter);
70
49
  margin-right: var(--neon-gutter);
@@ -4,12 +4,12 @@
4
4
 
5
5
  @mixin card-list {
6
6
  .neon-card-list {
7
- &__results-end {
7
+ &__result-count-label {
8
8
  align-self: center;
9
9
  user-select: none;
10
- margin-top: var(--neon-space-16);
11
- font-size: var(--neon-font-size-s);
12
- color: var(--neon-color-low-contrast);
10
+ font-size: var(--neon-font-size-xs);
11
+ color: var(--neon-color-text-secondary);
12
+ margin-top: var(--neon-space-32);
13
13
  }
14
14
 
15
15
  &__show-more {
@@ -23,7 +23,7 @@
23
23
  &__header {
24
24
  align-items: center;
25
25
  user-select: none;
26
- margin-bottom: var(--neon-space-16);
26
+ margin-bottom: var(--neon-space-8);
27
27
  font-size: var(--neon-font-size-xs);
28
28
  color: var(--neon-color-text-primary);
29
29
 
@@ -93,5 +93,30 @@
93
93
  }
94
94
  }
95
95
  }
96
+
97
+ &.neon-card-list--grid {
98
+ .neon-card-list__link {
99
+ width: fit-content;
100
+ min-width: fit-content;
101
+ max-width: fit-content;
102
+ display: inline-flex;
103
+ flex: 0 1 auto;
104
+ }
105
+
106
+ .neon-card-list__cards {
107
+ gap: var(--neon-space-32);
108
+ margin-top: var(--neon-space-32);
109
+ border-top: none;
110
+ flex-direction: row;
111
+ flex-wrap: wrap;
112
+ }
113
+
114
+ .neon-card-list__card {
115
+ width: fit-content;
116
+ max-width: fit-content;
117
+ flex: 0 1 auto;
118
+ padding: 0 0 var(--neon-space-24) 0;
119
+ }
120
+ }
96
121
  }
97
122
  }
@@ -36,6 +36,7 @@
36
36
 
37
37
  input {
38
38
  pointer-events: none;
39
+ touch-action: none;
39
40
  user-select: none;
40
41
  font-variant: tabular-nums;
41
42
  }
@@ -61,6 +62,7 @@
61
62
 
62
63
  .neon-date-picker__native-input {
63
64
  pointer-events: none;
65
+ touch-action: none;
64
66
  width: 100%;
65
67
  min-width: 100%;
66
68
  display: flex;
@@ -97,6 +97,7 @@
97
97
  z-index: var(--neon-z-index-below);
98
98
  position: fixed;
99
99
  pointer-events: none;
100
+ touch-action: none;
100
101
  top: 0;
101
102
  left: 0;
102
103
  @include layout.width(100);
@@ -61,8 +61,12 @@
61
61
  }
62
62
  }
63
63
 
64
+ .neon-button:hover {
65
+ z-index: var(--neon-z-index-above-2);
66
+ }
67
+
64
68
  .neon-button + .neon-button {
65
- border-left: var(--neon-border-width) var(--neon-border-style) var(--neon-color-inverse);
69
+ border-left: none;
66
70
  }
67
71
  }
68
72
 
@@ -29,7 +29,8 @@
29
29
  }
30
30
 
31
31
  &__subtitle {
32
- font-size: var(--neon-font-size-m);
32
+ font-size: var(--neon-font-size-header-subtitle);
33
+ color: var(--neon-color-header-subtitle);
33
34
  white-space: nowrap;
34
35
  }
35
36
 
@@ -11,6 +11,12 @@
11
11
  padding-right: var(--neon-size-#{$size});
12
12
  }
13
13
 
14
+ &.neon-input--state-loading {
15
+ input {
16
+ cursor: progress;
17
+ }
18
+ }
19
+
14
20
  &.neon-input--state-loading,
15
21
  &.neon-input--state-success,
16
22
  &.neon-input--state-error,
@@ -39,6 +39,7 @@
39
39
  color: var(--neon-color-disabled-text);
40
40
  cursor: not-allowed;
41
41
  pointer-events: none;
42
+ touch-action: none;
42
43
  }
43
44
  }
44
45
 
@@ -79,6 +79,7 @@
79
79
  opacity: 0;
80
80
  z-index: var(--neon-z-index-below);
81
81
  pointer-events: none;
82
+ touch-action: none;
82
83
  transition: opacity ease-in-out var(--neon-animation-speed-fast);
83
84
  }
84
85
 
@@ -14,6 +14,7 @@
14
14
 
15
15
  .neon-page__container {
16
16
  @include layout.min-height(100);
17
+ overflow-x: hidden;
17
18
 
18
19
  @include responsive.responsive(larger-than-tablet) {
19
20
  padding-left: var(--neon-gutter-desktop);
@@ -118,6 +118,7 @@
118
118
  .neon-slider__input,
119
119
  .neon-slider {
120
120
  pointer-events: none;
121
+ touch-action: none;
121
122
  }
122
123
 
123
124
  .neon-range-slider__lower,
@@ -132,14 +133,17 @@
132
133
  .neon-slider__input {
133
134
  &::-webkit-slider-thumb {
134
135
  pointer-events: none;
136
+ touch-action: none;
135
137
  }
136
138
 
137
139
  &::-moz-range-thumb {
138
140
  pointer-events: none;
141
+ touch-action: none;
139
142
  }
140
143
 
141
144
  &::-ms-thumb {
142
145
  pointer-events: none;
146
+ touch-action: none;
143
147
  }
144
148
  }
145
149
  }
@@ -30,8 +30,8 @@
30
30
  background: linear-gradient(to bottom, transparent, var(--neon-background-color));
31
31
  width: 100%;
32
32
  height: var(--neon-space-16);
33
- touch-action: none;
34
33
  pointer-events: none;
34
+ touch-action: none;
35
35
  }
36
36
 
37
37
  .neon-button {
@@ -56,7 +56,6 @@
56
56
  @forward './image-carousel';
57
57
  @forward './swiper';
58
58
  @forward './mobile-menu';
59
- @forward './page-container';
60
59
  @forward './banner';
61
60
  @forward './pagination';
62
61
  @forward './labelled-content';
@@ -69,3 +68,4 @@
69
68
  @forward './empty-state';
70
69
  @forward './list-layout';
71
70
  @forward './loading-state-card';
71
+ @forward './basic-layout';
@@ -131,7 +131,6 @@
131
131
  NeonImageCarousel: [NeonButton, NeonLink],
132
132
  NeonSwiper: [],
133
133
  NeonMobileMenu: [NeonIcon, NeonLink],
134
- NeonPageContainer: [NeonIcon],
135
134
  NeonBanner: [NeonButton, NeonNote, NeonIcon, NeonLink, NeonExpansionIndicator],
136
135
  NeonPagination: [NeonButton, NeonLink, NeonIcon],
137
136
  NeonLabelledContent: [],
@@ -144,6 +143,7 @@
144
143
  NeonEmptyState: [NeonButton, NeonIcon, NeonInline, NeonStack, NeonExpansionIndicator, NeonLink],
145
144
  NeonListLayout: [NeonBreadcrumbs, NeonButton, NeonCard, NeonCardBody, NeonCardHeader, NeonCardList, NeonEmptyState, NeonExpansionIndicator, NeonHeader, NeonIcon, NeonInline, NeonLink, NeonNote, NeonPagination, NeonSelectableCard, NeonSwiper, NeonSwitch],
146
145
  NeonLoadingStateCard: [NeonInline, NeonStack, NeonSkeletonLoader],
146
+ NeonBasicLayout: [NeonHeader, NeonBreadcrumbs, NeonButton, NeonExpansionIndicator, NeonIcon, NeonInline, NeonLink, NeonNote, NeonSwiper, NeonStack],
147
147
  );
148
148
 
149
149
  $neon-flattened-components: [];
@@ -273,10 +273,6 @@ $neon-components: null !default;
273
273
  @include components.mobile-menu;
274
274
  }
275
275
 
276
- @if index($neon-flattened-components, NeonPageContainer) {
277
- @include components.page-container;
278
- }
279
-
280
276
  @if index($neon-flattened-components, NeonBanner) {
281
277
  @include components.banner;
282
278
  }
@@ -324,4 +320,8 @@ $neon-components: null !default;
324
320
  @if index($neon-flattened-components, NeonLoadingStateCard) {
325
321
  @include components.loading-state-card;
326
322
  }
323
+
324
+ @if index($neon-flattened-components, NeonBasicLayout) {
325
+ @include components.basic-layout;
326
+ }
327
327
  }
@@ -1337,4 +1337,11 @@
1337
1337
  * Background color of the sticky button container.
1338
1338
  */
1339
1339
  --neon-background-color-sticky-buttons: var(--neon-color-high-contrast-d5);
1340
+
1341
+ /* header */
1342
+ /**
1343
+ * @component NeonHeader,NeonBasicLayout
1344
+ * Color of the header component subtitle
1345
+ */
1346
+ --neon-color-header-subtitle: var(--neon-color-text-secondary);
1340
1347
  }
@@ -427,6 +427,10 @@
427
427
  * XXL component size (buttons & badges only)
428
428
  */
429
429
  --neon-size-xxl: calc(20 * var(--neon-base-space));
430
+ /**
431
+ * XXXL component size (buttons & badges only)
432
+ */
433
+ --neon-size-xxxl: calc(72 * var(--neon-base-space));
430
434
 
431
435
  /* box shadows */
432
436
  /** Default box shadow */
@@ -1240,6 +1244,11 @@
1240
1244
  --neon-text-transform-label: none;
1241
1245
 
1242
1246
  /* badge */
1247
+ /**
1248
+ * @component NeonBadge,NeonAvatar
1249
+ * Badge border radius for square badges
1250
+ */
1251
+ --neon-border-radius-badge: var(--neon-border-radius);
1243
1252
  /**
1244
1253
  * @component NeonBadge
1245
1254
  * Background gradient angle for a multicolored badge
@@ -1275,6 +1284,11 @@
1275
1284
  * Size (height) of an XXL Badge
1276
1285
  */
1277
1286
  --neon-size-xxl-badge: var(--neon-size-xxl);
1287
+ /**
1288
+ * @component NeonBadge,NeonAvatar
1289
+ * Size (height) of an XXXL Badge
1290
+ */
1291
+ --neon-size-xxxl-badge: var(--neon-size-xxxl);
1278
1292
  /**
1279
1293
  * @component NeonBadge
1280
1294
  * Default opacity of an editable badge button
@@ -1334,13 +1348,6 @@
1334
1348
  */
1335
1349
  --neon-blur-radius-image-carousel: 5px;
1336
1350
 
1337
- /* page container */
1338
- /**
1339
- * @component NeonPageContainer
1340
- * Page container fixed height for sticky buttons
1341
- */
1342
- --neon-height-page-container-sticky-buttons: 72rem;
1343
-
1344
1351
  /* tree menu */
1345
1352
  /**
1346
1353
  * @component NeonTreeMenu
@@ -1410,4 +1417,11 @@
1410
1417
  * Border radius on the thumbnail placeholder in the loading state card. Set to 50% for a circular thumbnail.
1411
1418
  */
1412
1419
  --neon-border-radius-loading-state-card-thumbnail: var(--neon-border-radius-skeleton-loader);
1420
+
1421
+ /* Header component */
1422
+ /**
1423
+ * @component NeonHeader,NeonBasicLayout
1424
+ * Font size of the header component subtitle
1425
+ */
1426
+ --neon-font-size-header-subtitle: var(--neon-font-size-m);
1413
1427
  }
@@ -1337,4 +1337,11 @@
1337
1337
  * Background color of the sticky button container.
1338
1338
  */
1339
1339
  --neon-background-color-sticky-buttons: var(--neon-color-high-contrast-l5);
1340
+
1341
+ /* header */
1342
+ /**
1343
+ * @component NeonHeader,NeonBasicLayout
1344
+ * Color of the header component subtitle
1345
+ */
1346
+ --neon-color-header-subtitle: var(--neon-color-text-secondary);
1340
1347
  }
@@ -1,2 +0,0 @@
1
- "use strict";const e=require("vue"),o=require("../../presentation/icon/NeonIcon.vue.cjs.js"),s=e.defineComponent({name:"NeonPageContainer",components:{NeonIcon:o},props:{title:{type:String},hideNav:{type:Boolean,default:!1},stickyButtons:{type:Boolean,default:!1}},setup(n){const t=e.useSlots();return{hasHeader:e.computed(()=>n.title||t.header||t.actions)}}});module.exports=s;
2
- //# sourceMappingURL=NeonPageContainer.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NeonPageContainer.cjs.js","sources":["../../../../src/components/layout/page-container/NeonPageContainer.ts?vue&type=script&src=true&lang.ts"],"sourcesContent":["import { computed, defineComponent, useSlots } from 'vue';\nimport NeonIcon from '@/components/presentation/icon/NeonIcon.vue';\n\n/**\n * NeonPageContainer is a component for the layout of basic (non-card based) page content. It is designed to be placed\n * directly inside the NeonPage <em>contents</em> slot.\n * <br />\n * <br />\n * Features include support for sticky button placement and hiding the nav bar.\n */\nexport default defineComponent({\n name: 'NeonPageContainer',\n components: {\n NeonIcon,\n },\n props: {\n /** The page title */\n title: { type: String },\n /** Hide the navbar */\n hideNav: { type: Boolean, default: false },\n /** Sticky button support on mobile */\n stickyButtons: { type: Boolean, default: false },\n },\n setup(props) {\n const slots = useSlots();\n\n const hasHeader = computed(() => {\n return props.title || slots.header || slots.actions;\n });\n\n return {\n hasHeader,\n };\n },\n});\n"],"names":["_sfc_main","defineComponent","NeonIcon","props","slots","useSlots","computed"],"mappings":"6FAUAA,EAAeC,kBAAgB,CAC7B,KAAM,oBACN,WAAY,CACV,SAAAC,CAAA,EAEF,MAAO,CAEL,MAAO,CAAE,KAAM,MAAA,EAEf,QAAS,CAAE,KAAM,QAAS,QAAS,EAAA,EAEnC,cAAe,CAAE,KAAM,QAAS,QAAS,EAAA,CAAM,EAEjD,MAAMC,EAAO,CACX,MAAMC,EAAQC,EAAAA,SAAA,EAMd,MAAO,CACL,UALgBC,EAAAA,SAAS,IAClBH,EAAM,OAASC,EAAM,QAAUA,EAAM,OAC7C,CAGC,CAEJ,CACF,CAAC"}
@@ -1,26 +0,0 @@
1
- import { defineComponent as o, useSlots as n, computed as a } from "vue";
2
- import s from "../../presentation/icon/NeonIcon.vue.es.js";
3
- const l = o({
4
- name: "NeonPageContainer",
5
- components: {
6
- NeonIcon: s
7
- },
8
- props: {
9
- /** The page title */
10
- title: { type: String },
11
- /** Hide the navbar */
12
- hideNav: { type: Boolean, default: !1 },
13
- /** Sticky button support on mobile */
14
- stickyButtons: { type: Boolean, default: !1 }
15
- },
16
- setup(t) {
17
- const e = n();
18
- return {
19
- hasHeader: a(() => t.title || e.header || e.actions)
20
- };
21
- }
22
- });
23
- export {
24
- l as default
25
- };
26
- //# sourceMappingURL=NeonPageContainer.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NeonPageContainer.es.js","sources":["../../../../src/components/layout/page-container/NeonPageContainer.ts?vue&type=script&src=true&lang.ts"],"sourcesContent":["import { computed, defineComponent, useSlots } from 'vue';\nimport NeonIcon from '@/components/presentation/icon/NeonIcon.vue';\n\n/**\n * NeonPageContainer is a component for the layout of basic (non-card based) page content. It is designed to be placed\n * directly inside the NeonPage <em>contents</em> slot.\n * <br />\n * <br />\n * Features include support for sticky button placement and hiding the nav bar.\n */\nexport default defineComponent({\n name: 'NeonPageContainer',\n components: {\n NeonIcon,\n },\n props: {\n /** The page title */\n title: { type: String },\n /** Hide the navbar */\n hideNav: { type: Boolean, default: false },\n /** Sticky button support on mobile */\n stickyButtons: { type: Boolean, default: false },\n },\n setup(props) {\n const slots = useSlots();\n\n const hasHeader = computed(() => {\n return props.title || slots.header || slots.actions;\n });\n\n return {\n hasHeader,\n };\n },\n});\n"],"names":["_sfc_main","defineComponent","NeonIcon","props","slots","useSlots","computed"],"mappings":";;AAUA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,UAAAC;AAAA,EAAA;AAAA,EAEF,OAAO;AAAA;AAAA,IAEL,OAAO,EAAE,MAAM,OAAA;AAAA;AAAA,IAEf,SAAS,EAAE,MAAM,SAAS,SAAS,GAAA;AAAA;AAAA,IAEnC,eAAe,EAAE,MAAM,SAAS,SAAS,GAAA;AAAA,EAAM;AAAA,EAEjD,MAAMC,GAAO;AACX,UAAMC,IAAQC,EAAA;AAMd,WAAO;AAAA,MACL,WALgBC,EAAS,MAClBH,EAAM,SAASC,EAAM,UAAUA,EAAM,OAC7C;AAAA,IAGC;AAAA,EAEJ;AACF,CAAC;"}