@phila/phila-ui-app-footer 0.0.21 → 0.0.30

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.
package/README.md CHANGED
@@ -1,49 +1,75 @@
1
- ## Code Samples
2
- ### Props vs Slots Links
3
- The footer links can be added via props using the [Navigation Links](/components/NavLink) format.
4
- ```html
5
- <app-footer
6
- :links="myFooterLinks"
7
- />
1
+ # AppFooter Component
2
+
3
+ A simple, customizable Vue 3. AppFooter component built with TypeScript and Vite.
4
+ A footer vue component for site info and related links.
5
+
6
+ ## Features
7
+
8
+ - 🎯 TypeScript support with full type definitions
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm install @phila/phila-ui-app-footer
14
+ # or
15
+ yarn add @phila/phila-ui-app-footer
16
+ # or
17
+ pnpm add @phila/phila-ui-app-footer
8
18
  ```
9
19
 
10
- Or the links can be added using the default slot. The default slot accepts an unordered list of links.
11
- ```html
12
- <app-footer>
13
- <ul>
14
- <li>
15
- <a href="/about">About</a>
16
- </li>
17
- <li>
18
- <a href="/terms-and-conditions">Terms & Conditions</a>
19
- </li>
20
- </ul>
21
- </app-footer>
20
+ ## Usage
21
+
22
+ ```vue
23
+ <script setup lang="ts">
24
+ import { AppFooter } from "@phila/phila-ui-app-footer";
25
+ </script>
26
+ <template>...Add basic component template here...</template>
22
27
  ```
23
28
 
24
- ### Sticky Footer
25
- The footer can be fixed to the bottom of the page, so it's always visible.
26
- ```html
27
- <app-footer
28
- :is-sticky="true"
29
- />
29
+ ## Props
30
+
31
+ | Prop | Type | Default | Description |
32
+ | ---- | ---- | ------- | ----------- |
33
+
34
+ | ...Add props here...
35
+
36
+ ## Events
37
+
38
+ | Event | Payload | Description |
39
+ | ----- | ------- | ----------- |
40
+
41
+ | ...Add events here...
42
+
43
+ ## Examples
44
+
45
+ ...Add examples here...
46
+
47
+ ## Development
48
+
49
+ ### Install Dependencies
50
+
51
+ ```bash
52
+ pnpm install
30
53
  ```
31
54
 
32
- ### Mobile Display
33
- By default the footer is hidden on mobile devices. If the links in the footer are important, they should be added to the [Mobile Navigation](/components/MobileNav).
55
+ ### Run Demo
34
56
 
35
- If the footer must be displayed on mobile, set ``is-hidden-mobile`` to ``false``.
36
- ```html
37
- <app-footer
38
- :is-hidden-mobile="false"
39
- />
57
+ ```bash
58
+ pnpm dev
40
59
  ```
41
60
 
42
- ## Live Examples
43
- <alert type="warning">Open the iframe below in a new window as the footer is by default hidden on smaller screens</alert>
61
+ ### Build Library
62
+
63
+ ```bash
64
+ pnpm build
65
+ ```
66
+
67
+ ### Type Check
68
+
69
+ ```bash
70
+ pnpm type-check
71
+ ```
44
72
 
45
- ### Non-sticky, using the slot
46
- <example name="AppFooter1" height="300" :options="{ horizontal: true}"></example>
73
+ ## License
47
74
 
48
- ### Sticky, using the link prop
49
- <example name="AppFooter2" height="300" :options="{ horizontal: true}"></example>
75
+ MIT
@@ -1,42 +1,4 @@
1
- import { AppFooterProps } from './types';
2
-
3
- declare function __VLS_template(): {
4
- default?(_: {}): any;
5
- };
6
- declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<AppFooterProps>, {
7
- links(): never[];
8
- isSticky: boolean;
9
- isHiddenMobile: boolean;
10
- }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<AppFooterProps>, {
11
- links(): never[];
12
- isSticky: boolean;
13
- isHiddenMobile: boolean;
14
- }>>> & Readonly<{}>, {
15
- links: import('@phila/phila-ui-nav-link').NavLinkProps[];
16
- isSticky: boolean;
17
- isHiddenMobile: boolean;
18
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
19
- declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
1
+ import { AppFooterProps } from './index';
2
+ declare const _default: import('vue').DefineComponent<AppFooterProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<AppFooterProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLSpanElement>;
20
3
  export default _default;
21
- type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
22
- type __VLS_TypePropsToRuntimeProps<T> = {
23
- [K in keyof T]-?: {} extends Pick<T, K> ? {
24
- type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
25
- } : {
26
- type: import('vue').PropType<T[K]>;
27
- required: true;
28
- };
29
- };
30
- type __VLS_WithDefaults<P, D> = {
31
- [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
32
- default: D[K];
33
- }> : P[K];
34
- };
35
- type __VLS_Prettify<T> = {
36
- [K in keyof T]: T[K];
37
- } & {};
38
- type __VLS_WithTemplateSlots<T, S> = T & {
39
- new (): {
40
- $slots: S;
41
- };
42
- };
4
+ //# sourceMappingURL=AppFooter.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppFooter.vue.d.ts","sourceRoot":"","sources":["../src/AppFooter.vue"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;;AA+D9C,wBASG"}
package/dist/index.css ADDED
File without changes
@@ -0,0 +1,5 @@
1
+ import { BaseProps } from '@phila/phila-ui-core';
2
+ export { default as AppFooter } from './AppFooter.vue';
3
+ export interface AppFooterProps extends BaseProps {
4
+ }
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIvD,MAAM,WAAW,cAAe,SAAQ,SAAS;CAEhD"}
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const e=require("vue"),n=require("@phila/phila-ui-core"),a=e.defineComponent({__name:"AppFooter",props:{className:{}},setup(o,{emit:c}){const t=o,s=e.computed(()=>n.cn("default-class",t.className));return(r,u)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(s.value)}," Hello world! I am AppFooter ",2))}}),p=(o,c)=>{const t=o.__vccOpts||o;for(const[s,r]of c)t[s]=r;return t},l=p(a,[["__scopeId","data-v-f636e62c"]]);exports.AppFooter=l;
package/dist/index.mjs ADDED
@@ -0,0 +1,22 @@
1
+ import { defineComponent as r, computed as a, createElementBlock as n, openBlock as p, normalizeClass as l } from "vue";
2
+ import { cn as m } from "@phila/phila-ui-core";
3
+ import './index.css';const _ = /* @__PURE__ */ r({
4
+ __name: "AppFooter",
5
+ props: {
6
+ className: {}
7
+ },
8
+ setup(e, { emit: s }) {
9
+ const o = e, t = a(() => m("default-class", o.className));
10
+ return (c, u) => (p(), n("span", {
11
+ class: l(t.value)
12
+ }, " Hello world! I am AppFooter ", 2));
13
+ }
14
+ }), f = (e, s) => {
15
+ const o = e.__vccOpts || e;
16
+ for (const [t, c] of s)
17
+ o[t] = c;
18
+ return o;
19
+ }, v = /* @__PURE__ */ f(_, [["__scopeId", "data-v-f636e62c"]]);
20
+ export {
21
+ v as AppFooter
22
+ };
package/package.json CHANGED
@@ -1,48 +1,52 @@
1
1
  {
2
2
  "name": "@phila/phila-ui-app-footer",
3
- "private": false,
4
- "version": "0.0.21",
3
+ "version": "0.0.30",
5
4
  "type": "module",
6
- "files": [
7
- "dist"
8
- ],
9
- "main": "./dist/AppFooter.umd.cjs",
10
- "module": "./dist/AppFooter.js",
11
- "types": "./dist/types.d.ts",
5
+ "description": "A footer vue component for site info and related links.",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
12
9
  "exports": {
13
10
  ".": {
14
- "import": {
15
- "types": "./dist/types.d.ts",
16
- "default": "./dist/AppFooter.js"
17
- },
18
- "require": "./dist/AppFooter.umd.cjs"
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.js"
19
14
  }
20
15
  },
21
- "scripts": {
22
- "dev": "vite",
23
- "prepublish": "cd ../NavLink && npm i && npm run build && cd ../DropdownNav && npm i && npm run build && cd ../AppFooter && npm i && npm run build",
24
- "build": "vue-tsc && vite build",
25
- "preview": "vite preview"
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "keywords": [
20
+ "ui",
21
+ "app-footer",
22
+ "vue",
23
+ "component"
24
+ ],
25
+ "author": "",
26
+ "license": "MIT",
27
+ "peerDependencies": {
28
+ "vue": "^3.0.0"
26
29
  },
27
30
  "dependencies": {
28
- "@phila/phila-ui-core": "^1.0.24",
29
- "@phila/phila-ui-nav-link": "^0.0.12",
30
- "bulma": "^0.9.4",
31
- "vue": "^3.3.8"
31
+ "@phila/phila-ui-core": "2.1.0"
32
32
  },
33
33
  "devDependencies": {
34
- "@types/node": "^20.10.3",
35
- "@vitejs/plugin-vue": "^4.5.0",
36
- "sass": "^1.69.5",
37
- "typescript": "^5.8.2",
38
- "vite": "^5.0.0",
39
- "vite-plugin-dts": "^3.6.4",
40
- "vite-plugin-lib-inject-css": "^1.3.0",
41
- "vue-tsc": "^2.2.8"
34
+ "@types/node": "^24.0.0",
35
+ "@vitejs/plugin-vue": "^6.0.1",
36
+ "eslint": "^9.0.0",
37
+ "typescript": "^5.8.3",
38
+ "vite": "^7.0.6",
39
+ "vite-plugin-dts": "^4.5.4",
40
+ "vite-plugin-lib-inject-css": "^2.2.2"
42
41
  },
43
- "publishConfig": {
44
- "registry": "https://registry.npmjs.com/",
45
- "access": "public"
46
- },
47
- "gitHead": "09f2b67c1d3db773c813231e21b62b37e34aefbd"
48
- }
42
+ "scripts": {
43
+ "build": "vite build",
44
+ "dev": "vite build --watch",
45
+ "lint": "eslint src --ext .ts,.tsx,.vue",
46
+ "lint:fix": "eslint src --ext .ts,.tsx,.vue --fix",
47
+ "type-check": "tsc --noEmit",
48
+ "clean": "rm -rf dist",
49
+ "format": "prettier --write .",
50
+ "format:check": "prettier --check ."
51
+ }
52
+ }
@@ -1 +0,0 @@
1
- @font-face{font-family:Montserrat;src:local("Montserrat Regular"),local("Montserrat-Regular"),url(https://www.phila.gov/assets/fonts/Montserrat/Montserrat-Regular.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/Montserrat/Montserrat-Regular.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:local("Open Sans Italic"),local("OpenSans-Italic"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Italic.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Italic.woff) format("woff");font-weight:400;font-style:italic}@font-face{font-family:Open Sans;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-BoldItalic.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-BoldItalic.woff) format("woff");font-weight:700;font-style:italic}@font-face{font-family:Montserrat;src:local("Montserrat Bold"),local("Montserrat-Bold"),url(https://www.phila.gov/assets/fonts/Montserrat/Montserrat-Bold.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/Montserrat/Montserrat-Bold.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Open Sans;src:local("Open Sans Bold"),local("OpenSans-Bold"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Bold.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Bold.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Open Sans;src:local("Open Sans SemiBold Italic"),local("OpenSans-SemiBoldItalic"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-SemiBoldItalic.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-SemiBoldItalic.woff) format("woff");font-weight:600;font-style:italic}@font-face{font-family:Open Sans;src:local("Open Sans SemiBold"),local("OpenSans-SemiBold"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-SemiBold.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-SemiBold.woff) format("woff");font-weight:600;font-style:normal}@font-face{font-family:Open Sans;src:local("Open Sans Regular"),local("OpenSans-Regular"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Regular.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Regular.woff) format("woff");font-weight:400;font-style:normal}#app-footer[data-v-f34d21d1]{background-color:#0f4d90;height:46px;max-height:46px;overflow:hidden;width:100%}#app-footer a[data-v-f34d21d1]{color:#fff;line-height:46px}#app-footer a[data-v-f34d21d1]:hover{color:#25cef7}#app-footer.is-sticky[data-v-f34d21d1]{position:fixed;bottom:0;z-index:99}#app-footer ul[data-v-f34d21d1]{list-style:none;padding:0;margin:0}#app-footer ul li[data-v-f34d21d1]{display:inline-block;vertical-align:middle;margin:0;padding:0}#app-footer ul li[data-v-f34d21d1]:not(:last-child):after{content:"|";margin:0 1rem;display:inline-block;position:relative;color:#fff;font-weight:700}
package/dist/AppFooter.js DELETED
@@ -1,63 +0,0 @@
1
- import "./AppFooter.css";
2
- import { defineComponent as m, inject as v, computed as y, ref as k, onMounted as h, resolveComponent as _, createElementBlock as a, createCommentVNode as g, openBlock as c, normalizeClass as H, createElementVNode as u, renderSlot as b, Fragment as M, renderList as S, createVNode as x, mergeProps as B } from "vue";
3
- const F = { class: "container has-text-centered" }, N = {
4
- key: 0,
5
- role: "menu",
6
- class: "inline-list"
7
- }, A = /* @__PURE__ */ m({
8
- __name: "AppFooter",
9
- props: {
10
- links: { default() {
11
- return [];
12
- } },
13
- isSticky: { type: Boolean, default: !0 },
14
- isHiddenMobile: { type: Boolean, default: !1 }
15
- },
16
- setup(n) {
17
- const s = n, l = v("responsiveHelpers"), { responsiveState: p } = l, o = y(() => p.isMobile), r = k();
18
- return h(() => {
19
- var i;
20
- const e = document.getElementById("app-header"), t = document.querySelector("main");
21
- if (t) {
22
- if (s.isSticky && r.value)
23
- t.style.cssText = t.style.cssText + `padding-bottom: ${r.value.offsetHeight}px`;
24
- else if (o.value && !s.isHiddenMobile || !o.value)
25
- if (e) {
26
- const d = e.offsetHeight + (((i = r.value) == null ? void 0 : i.offsetHeight) || 0);
27
- t.style.cssText = t.style.cssText + `min-height: calc(100vh - ${d}px)`;
28
- } else
29
- console.warn("AppFooter: No app-header found, unable to calculate sticky footer height");
30
- } else
31
- console.warn("AppFooter: No main element found, unable to calculate sticky footer height");
32
- }), (e, t) => {
33
- const i = _("nav-link");
34
- return o.value && !e.isHiddenMobile || !o.value ? (c(), a("footer", {
35
- key: 0,
36
- id: "app-footer",
37
- ref_key: "footer",
38
- ref: r,
39
- class: H({ "is-sticky": e.isSticky })
40
- }, [
41
- t[0] || (t[0] = u("div", { class: "container" }, null, -1)),
42
- u("div", F, [
43
- e.links.length > 0 ? (c(), a("ul", N, [
44
- (c(!0), a(M, null, S(e.links, (d, f) => (c(), a("li", {
45
- key: `fl-${f}`,
46
- role: "none"
47
- }, [
48
- x(i, B({ ref_for: !0 }, d, { role: "menuitem" }), null, 16)
49
- ]))), 128))
50
- ])) : b(e.$slots, "default", { key: 1 }, void 0, !0)
51
- ])
52
- ], 2)) : g("", !0);
53
- };
54
- }
55
- }), C = (n, s) => {
56
- const l = n.__vccOpts || n;
57
- for (const [p, o] of s)
58
- l[p] = o;
59
- return l;
60
- }, E = /* @__PURE__ */ C(A, [["__scopeId", "data-v-f34d21d1"]]);
61
- export {
62
- E as default
63
- };
@@ -1,2 +0,0 @@
1
- (function(e,n){typeof exports=="object"&&typeof module<"u"?module.exports=n(require("vue")):typeof define=="function"&&define.amd?define(["vue"],n):(e=typeof globalThis<"u"?globalThis:e||self,e.AppFooter=n(e.Vue))})(this,function(e){"use strict";var n=document.createElement("style");n.textContent=`@font-face{font-family:Montserrat;src:local("Montserrat Regular"),local("Montserrat-Regular"),url(https://www.phila.gov/assets/fonts/Montserrat/Montserrat-Regular.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/Montserrat/Montserrat-Regular.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:local("Open Sans Italic"),local("OpenSans-Italic"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Italic.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Italic.woff) format("woff");font-weight:400;font-style:italic}@font-face{font-family:Open Sans;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-BoldItalic.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-BoldItalic.woff) format("woff");font-weight:700;font-style:italic}@font-face{font-family:Montserrat;src:local("Montserrat Bold"),local("Montserrat-Bold"),url(https://www.phila.gov/assets/fonts/Montserrat/Montserrat-Bold.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/Montserrat/Montserrat-Bold.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Open Sans;src:local("Open Sans Bold"),local("OpenSans-Bold"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Bold.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Bold.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Open Sans;src:local("Open Sans SemiBold Italic"),local("OpenSans-SemiBoldItalic"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-SemiBoldItalic.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-SemiBoldItalic.woff) format("woff");font-weight:600;font-style:italic}@font-face{font-family:Open Sans;src:local("Open Sans SemiBold"),local("OpenSans-SemiBold"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-SemiBold.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-SemiBold.woff) format("woff");font-weight:600;font-style:normal}@font-face{font-family:Open Sans;src:local("Open Sans Regular"),local("OpenSans-Regular"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Regular.woff2) format("woff2"),url(https://www.phila.gov/assets/fonts/OpenSans/OpenSans-Regular.woff) format("woff");font-weight:400;font-style:normal}#app-footer[data-v-f34d21d1]{background-color:#0f4d90;height:46px;max-height:46px;overflow:hidden;width:100%}#app-footer a[data-v-f34d21d1]{color:#fff;line-height:46px}#app-footer a[data-v-f34d21d1]:hover{color:#25cef7}#app-footer.is-sticky[data-v-f34d21d1]{position:fixed;bottom:0;z-index:99}#app-footer ul[data-v-f34d21d1]{list-style:none;padding:0;margin:0}#app-footer ul li[data-v-f34d21d1]{display:inline-block;vertical-align:middle;margin:0;padding:0}#app-footer ul li[data-v-f34d21d1]:not(:last-child):after{content:"|";margin:0 1rem;display:inline-block;position:relative;color:#fff;font-weight:700}
2
- /*$vite$:1*/`,document.head.appendChild(n);const d={class:"container has-text-centered"},w={key:0,role:"menu",class:"inline-list"};return((s,l)=>{const f=s.__vccOpts||s;for(const[p,a]of l)f[p]=a;return f})(e.defineComponent({__name:"AppFooter",props:{links:{default(){return[]}},isSticky:{type:Boolean,default:!0},isHiddenMobile:{type:Boolean,default:!1}},setup(s){const l=s,f=e.inject("responsiveHelpers"),{responsiveState:p}=f,a=e.computed(()=>p.isMobile),r=e.ref();return e.onMounted(()=>{var i;const t=document.getElementById("app-header"),o=document.querySelector("main");if(o){if(l.isSticky&&r.value)o.style.cssText=o.style.cssText+`padding-bottom: ${r.value.offsetHeight}px`;else if(a.value&&!l.isHiddenMobile||!a.value)if(t){const c=t.offsetHeight+(((i=r.value)==null?void 0:i.offsetHeight)||0);o.style.cssText=o.style.cssText+`min-height: calc(100vh - ${c}px)`}else console.warn("AppFooter: No app-header found, unable to calculate sticky footer height")}else console.warn("AppFooter: No main element found, unable to calculate sticky footer height")}),(t,o)=>{const i=e.resolveComponent("nav-link");return a.value&&!t.isHiddenMobile||!a.value?(e.openBlock(),e.createElementBlock("footer",{key:0,id:"app-footer",ref_key:"footer",ref:r,class:e.normalizeClass({"is-sticky":t.isSticky})},[o[0]||(o[0]=e.createElementVNode("div",{class:"container"},null,-1)),e.createElementVNode("div",d,[t.links.length>0?(e.openBlock(),e.createElementBlock("ul",w,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.links,(c,m)=>(e.openBlock(),e.createElementBlock("li",{key:`fl-${m}`,role:"none"},[e.createVNode(i,e.mergeProps({ref_for:!0},c,{role:"menuitem"}),null,16)]))),128))])):e.renderSlot(t.$slots,"default",{key:1},void 0,!0)])],2)):e.createCommentVNode("",!0)}}}),[["__scopeId","data-v-f34d21d1"]])});
package/dist/types.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import { default as AppFooter } from './AppFooter.vue';
2
- import { NavLinkProps } from '@phila/phila-ui-nav-link';
3
-
4
- declare module "vue" {
5
- interface GlobalComponents {
6
- AppFooter: typeof AppFooter;
7
- }
8
- }
9
- export interface AppFooterProps {
10
- links: NavLinkProps[];
11
- isSticky?: boolean;
12
- isHiddenMobile?: boolean;
13
- }
14
- export default AppFooter;